Sendcore
Campaigns, automations, popups and store attribution, installed into a Shopify or WooCommerce shop
The editor is the copyable part. A coding agent will happily build a private Shopify app that pulls your products, composes an HTML campaign and sends it with your own provider key, and for one store that is genuinely useful. What does not fall out of a one-shot is everything that makes it a product a merchant can run a business on: a listed App Store app with OAuth, mandatory GDPR data webhooks and billing that lands on the merchant's own Shopify invoice, per-tenant domain authentication with the DNS handholding it needs, and the consent, suppression and bounce records that keep sending both legal and delivered. Worth saying plainly: Sendcore is small and recent, with no audience network and no proprietary dataset to hide behind. It survives on platform surface, compliance plumbing and the unglamorous backlog that only real merchant sending reveals, which is a narrower moat than Klaviyo's and an honest one.
Build verification: not recorded. How we judge buildability
What you give up
- App Store distribution: OAuth install, app review and the mandatory GDPR data webhooks
- billing that appears on the merchant's own Shopify invoice instead of a separate card
- domain authentication onboarding and per-tenant sender reputation
- bounce, complaint and suppression handling
- order-level revenue attribution and automations that fire on real store events
Why people still pay
Merchants pay for the parts nobody enjoys building: staying installed and billed inside Shopify, keeping consent and suppression records defensible when a customer or a regulator asks, and getting mail into inboxes from a domain the merchant owns. The campaign editor is the part that demos well and the part an agent reproduces in an afternoon, right up to the moment other people's content meets other people's inboxes. Pasted rich text with mixed inline formatting, merge tags that must not eat the punctuation around them, product blocks that survive Outlook, automation timing that has to line up with a real order: none of these are design problems. They are a backlog you only discover by sending mail on behalf of other businesses, and grinding through it is what separates a demo from something a shop trusts with its list.
Your build guide
The stack, security requirements, and agent rules for a focused replacement.
Before you start
- Node.js 22
- SQLite
- Shopify custom app Admin API token (read_products, read_customers, read_orders)
- Bulk email provider key in .env
- A sending domain you control, with SPF and DKIM already verified
Use these project rules and optional skill references alongside the prompt. Review each skill before adding it to your agent; the AGENTS.md export includes the same guidance.
Project rule, data: Model subscribers, consent records, campaigns, delivery attempts, and suppression state; keep stable source IDs and timestamps.
Project rule, behavior: Send through one bulk email provider with my API key and my already-authenticated sending domain; both in .env, ship a .env.example.
Project rule, recovery: SQLite tables: contacts (email, consent state, source, created_at), products cached from Shopify, campaigns (subject, body_html, status, sent_at), and sends (contact_id, campaign_id, status, error).
Implementation plan
Phase 1, architecture and data
Node 22 + Fastify + better-sqlite3, server-rendered HTML, no client framework. Model subscribers, consent records, campaigns, delivery attempts, and suppression state; keep stable source IDs and timestamps.
Phase 2, implement
Send through one bulk email provider with my API key and my already-authenticated sending domain; both in .env, ship a .env.example.
Phase 3, implement
SQLite tables: contacts (email, consent state, source, created_at), products cached from Shopify, campaigns (subject, body_html, status, sent_at), and sends (contact_id, campaign_id, status, error).
Phase 4, review and output
Send in batches with retry and backoff, one send row per recipient, so a crash resumes instead of double-sending. Report delivered and failed from the sends table only; do not invent open or click tracking. CSV import and export for contacts so the data is never trapped in the app.
Phase 5, recovery and acceptance
SQLite tables: contacts (email, consent state, source, created_at), products cached from Shopify, campaigns (subject, body_html, status, sent_at), and sends (contact_id, campaign_id, status, error). Verify this invariant with a saved fixture: Unsubscribed or bounced addresses must stay suppressed; retrying an ambiguous provider response cannot silently send twice. State the practical limit: App Store distribution: OAuth install, app review and the mandatory GDPR data webhooks.
Build me a private Shopify campaign sender for one store I already own. Not a SaaS, not multi-tenant, no signup. Requirements: - Node 22 + Fastify + better-sqlite3, server-rendered HTML, no client framework. - Read the store with a Shopify custom app Admin API token I create myself (read_products, read_customers, read_orders); no OAuth, no App Store install flow. - Send through one bulk email provider with my API key and my already-authenticated sending domain; both in .env, ship a .env.example. - SQLite tables: contacts (email, consent state, source, created_at), products cached from Shopify, campaigns (subject, body_html, status, sent_at), and sends (contact_id, campaign_id, status, error). - Every contact carries an explicit consent state. Never send to an unsubscribed or unconsented contact, and prove that with a test. - Every email gets a working one-click unsubscribe link plus List-Unsubscribe headers, backed by a signed token and honoured immediately. - The composer is a plain HTML textarea plus a product picker that inserts image, title, price, and link from the synced cache. Render with inline styles and a table layout so it survives Gmail and Outlook; no external stylesheets or web fonts. - Always send a test to myself first, and require a typed confirmation of the recipient count before any real send. - Send in batches with retry and backoff, one send row per recipient, so a crash resumes instead of double-sending. Report delivered and failed from the sends table only; do not invent open or click tracking. - CSV import and export for contacts so the data is never trapped in the app. - Tests: the consent gate, the unsubscribe token, batch resume, and one end-to-end campaign against a mocked provider. - README states what this is not: no deliverability operations, no bounce or complaint processing, no App Store distribution, no billing. Say plainly that real volume from a cold domain lands in spam, and warmup is now the reader's job.
$ open in your agent (prompt prefilled, you press enter), copy the prompt or copy AGENTS.md
prompt copied. want to know what dies next week?
new verdicts + top votes, weekly. free. one-click out.
Sendcore pricing
| plan | monthly | annual (per mo) | what you get |
|---|---|---|---|
| free | $0/workspace | $0/workspace | Up to 250 contacts, 500 emails/month, email marketing/templates, essential automations, popups and signup forms.Shopify app listing. |
| standard | $16/workspace | — | Starting price up to 500 contacts, 6,000 emails/month, advanced segments, A/B testing, AI subject lines, prebuilt workflows.Scales with contacts. |
| pro | $59/workspace | — | Starting price up to 2,500 contacts, unlimited email and push, product recommendations, deliverability audit/warm-up, AI writing.Scales with contacts. |
| enterprise | $99/workspace | — | Up to 2,500 contacts, full CRM with customer statuses/followups/reminders, assign customers, AI health/churn.Scales with contacts. |
free tier$0; up to 250 contacts and 500 emails/month.
billingmonthly only on Shopify listing; recurring and usage-based charges billed every 30 days
hidden costsExternal charges may be billed separately from the Shopify invoice; pricing scales with contact count.
pricing sources checked 2026-08-10 · pricing source ↗
Questions about Sendcore
Can you build your own Sendcore with AI?
A full replacement is not the recommended project. The editor is the copyable part. A coding agent will happily build a private Shopify app that pulls your products, composes an HTML campaign and sends it with your own provider key, and for one store that is genuinely useful. What does not fall out of a one-shot is everything that makes it a product a merchant can run a business on: a listed App Store app with OAuth, mandatory GDPR data webhooks and billing that lands on the merchant's own Shopify invoice, per-tenant domain authentication with the DNS handholding it needs, and the consent, suppression and bounce records that keep sending both legal and delivered. Worth saying plainly: Sendcore is small and recent, with no audience network and no proprietary dataset to hide behind. It survives on platform surface, compliance plumbing and the unglamorous backlog that only real merchant sending reveals, which is a narrower moat than Klaviyo's and an honest one.
What does the Sendcore build prompt cover?
The prompt starts with this scope: Build a private Shopify app that syncs your products and customers, composes an HTML campaign with a product block, and sends it to a consented segment through your own email provider key. Full-product capabilities excluded from the comparison include: App Store distribution: OAuth install, app review and the mandatory GDPR data webhooks; billing that appears on the merchant's own Shopify invoice instead of a separate card; domain authentication onboarding and per-tenant sender reputation. Follow the implementation plan and its prerequisites before expanding the build.
How do I use the prompt, AGENTS.md and agent skills?
Start with the Sendcore prerequisites and stack, then copy the prompt into your coding agent. Save the project rules as AGENTS.md in the project root. Linked skills are optional packages or source instructions for specific tasks; review their current contents and install only those matching the chosen stack. A skill does not supply API credentials or verify the finished app.
How long will this Sendcore project take?
The catalogue estimate is one sitting for a single store; not a multi-tenant product for the limited scope. Setup, integration approvals, debugging, deployment and ongoing maintenance can add time. This is an estimate, not a delivery guarantee.
What would I give up by replacing Sendcore?
App Store distribution: OAuth install, app review and the mandatory GDPR data webhooks; billing that appears on the merchant's own Shopify invoice instead of a separate card; domain authentication onboarding and per-tenant sender reputation; bounce, complaint and suppression handling; order-level revenue attribution and automations that fire on real store events. Merchants pay for the parts nobody enjoys building: staying installed and billed inside Shopify, keeping consent and suppression records defensible when a customer or a regulator asks, and getting mail into inboxes from a domain the merchant owns. The campaign editor is the part that demos well and the part an agent reproduces in an afternoon, right up to the moment other people's content meets other people's inboxes. Pasted rich text with mixed inline formatting, merge tags that must not eat the punctuation around them, product blocks that survive Outlook, automation timing that has to line up with a real order: none of these are design problems. They are a backlog you only discover by sending mail on behalf of other businesses, and grinding through it is what separates a demo from something a shop trusts with its list.
What price is this guide comparing against?
The recorded Standard plan is $16 reference price (monthly, by billable contacts), checked 2026-08-02. Check the linked pricing source before buying. Building your own also has hosting, API and maintenance costs; the recorded amount is not a guaranteed saving.
What can I use instead of building Sendcore?
The prior-art section lists listmonk, Mautic, Keila as starting points. Review their current scope, license and maintenance before adopting one.