For a store where one person answers email, the core is small: pull the support mailbox, thread messages into tickets, show the customer's Shopify orders beside them and reply with templates. An agent can build that over a weekend. The gaps are the other channels (chat widget, Instagram, Facebook, TikTok, SMS, voice), one-click refunds and the AI Agent. With Starter at $10 a month, building pays off mainly if you want to own your data or stop paying per ticket.
Before you buildGorgias Starter is $10 a month for 50 tickets, which may be cheaper than your time for a small store. Chatwoot self-hosted already has a Shopify order panel if you want to own the data without building.
Build me a support inbox for my Shopify store to replace Gorgias. Requirements:
- Node.js 22 + TypeScript: Fastify with server-rendered pages and htmx on
http://127.0.0.1:4900; storage in better-sqlite3 at ./data/helpdesk.db and
attachments in ./data/files/.
- Email in: poll the support mailbox every minute with imapflow, parse with
mailparser, and thread messages into tickets by Message-ID, In-Reply-To and
References. Ticket statuses: open, waiting, closed; tags; snooze until a date.
- Email out: replies go through nodemailer over the same mailbox's SMTP and stay
threaded, so the customer sees one conversation in their own mail app.
- Shopify panel beside each ticket: find the customer by email through the Admin
GraphQL API and show their last 5 orders with total, payment and fulfillment
status, tracking links and a link to the order in Shopify admin.
- Shopify auth: an app created in the Dev Dashboard and installed on my store.
Read SHOPIFY_STORE, SHOPIFY_CLIENT_ID and SHOPIFY_CLIENT_SECRET from .env, get
a token with the client-credentials grant and refresh it before it expires
(24 hours). Scopes: read_customers, read_orders.
- Macros: saved replies with liquidjs variables ({{ customer.first_name }},
{{ order.name }}, {{ order.tracking_url }}), filled from the panel and editable
before sending.
- Full-text search over all tickets with SQLite FTS5; keyboard shortcuts for next
ticket, close and insert macro.
- Single user. No accounts, no telemetry, local-first; listen on 127.0.0.1 only.
- Out of scope: refunds and order edits (link to Shopify admin instead), live
chat, social channels, SMS, voice and AI auto-replies.
- README: the Dev Dashboard steps (budget 30 minutes), the mailbox app password,
and how to back up ./data.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Gorgias.
Add a website chat widget to the support inbox in this folder. Requirements: - A widget script under 15 KB that I paste into my Shopify theme; it asks for an email first, then opens the chat. - Messages travel over WebSockets (the ws package) to a second port (CHAT_PORT in .env) that serves only the widget and the socket, rate-limited per IP. - Each chat becomes a ticket with channel "chat"; my replies appear live in the widget, and a chat left unanswered for 10 minutes is answered by email. - Update the README with exposing the chat port through a Cloudflare Tunnel.
Add AI reply drafts to the support inbox in this folder. Requirements: - A Draft button sends the thread, the customer's last 3 orders from the Shopify panel and my macros to the LLM configured in .env. - The draft lands in the reply box for me to edit; nothing is sent automatically. - Drafts may only use tracking numbers, dates and amounts from the order data, and must say when data is missing. - Log token usage per draft and show the monthly total in settings. - Update the README.
Add order actions to the Shopify panel of the support inbox in this folder. Requirements: - Add the write_orders scope to the Dev Dashboard app and document the change. - Actions: cancel an unfulfilled order, and refund chosen line items or a custom amount, through the Admin GraphQL API. - Every action opens a confirmation showing the exact items and amount, and is written to an append-only log with the ticket id. - Refuse refunds above what is still refundable on the order. - Update the README.
Add an importer for Gorgias exports to the support inbox in this folder. Requirements: - Accept the CSVs from Analytics > a metric's drill-down > Export with message content (30 days per file) and the ticket export from an inbox view. - Read the header first, show the column mapping and ask before importing. - Group rows into tickets by ticket ID, keep the original dates, and mark them closed and "imported from Gorgias". - Skip tickets already imported, so overlapping files are safe. - Update the README with the export steps and the custom-export request to Gorgias support for older history.
Shopify brands pay because every channel lands in one inbox with the order next to the message, and agents can refund or cancel without opening the Shopify admin. Above a few hundred tickets a month the time saved per ticket covers the bill, and the AI Agent takes the routine where-is-my-order questions off the team.
Estimate · Free on a machine you already run; a small VPS is about $5 a month. The Shopify Admin API costs nothing for your own store. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Starter | $10 | — | 50 billable tickets a month, 3 users; $0.40 per extra ticket. |
| Basic | $60 | $50 | 300 tickets a month; $0.40 per extra ticket. |
| Pro | $360 | $300 | 2,000 tickets a month; $0.36 per extra ticket. |
| Advanced | $900 | $750 | 5,000 tickets a month; $0.36 per extra ticket. |
| Enterprise | custom | — | For more than 5,000 conversations a month. |
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Chat, Instagram, Facebook, TikTok, WhatsApp, SMS and voice in the same inbox, The AI Agent that answers and closes routine tickets.
About $10 a month on the Starter plan, $120 a year (checked 2026-10-13).
Chat, Instagram, Facebook, TikTok, WhatsApp, SMS and voice in the same inbox; The AI Agent that answers and closes routine tickets; Refunds, cancels and order edits from inside the ticket; Rules, collision detection and a shared team inbox; The help center and revenue reports. If any of those matter to you, keep paying.
Yes: Chatwoot (open source), Libredesk (open source), FreeScout (open source).