Job ticket 736970 · SMB · ticket counter · no subscription
Zendesk has no free tier — US$19 an agent. Here is the counter that writes the queue for nothing.
This page is a ticket counter. You feed it a ticket sample, a team, or a recurring question, a free-tier model returns the macro library, the routing rules, or the KB article as strict JSON, and your browser cuts it as numbered ticket stubs you export as Markdown. No help desk is connected, no ticket is routed, nothing is stored — the documents are what the queue runs on, in Zendesk, in a free ticket tool, or on a printed card at the desk. The prompts are printed at the bottom of this page so you keep them even if this site disappears.
Zendesk is a trademark of Zendesk, Inc. This is an independent, unaffiliated comparison built on Zendesk's own published pricing page, linked below. We are not Zendesk, and nothing here is endorsed by them.
Ticket counter — rendered in this browser
Sample data is illustrative, not a claim about Zendesk. Every Zendesk figure on this page comes from the linked pricing page, read 2026-09-17.
The prompt pack
Three prompts, each mapped one-to-one onto a Zendesk feature you are currently rationed on. Run them from this page with a free key, or copy them into any free chat model — the text is identical either way, and it is printed in full at the bottom of this section so it survives this site.
Loading the pack from tools.json… If this fails, the full prompt text is still readable below.
What Zendesk's own pricing page says
Read from zendesk.com/pricing on 2026-09-17. Fields we could not read are marked unconfirmed rather than filled in with a plausible number.
| The job | Support, Team (US$19/agent) | Suite tiers (US$55–115/agent) | This page + a free-tier model |
|---|---|---|---|
| Price | US$19 per agent / month (billed annually) — entry plan | US$55 Suite Team · US$115 Suite Professional, per agent / month | US$0 forever. A free-tier key costs nothing; the prompts are yours. |
| Pre-written responses | On the Team plan | On all paid plans | Unmetered by us — Prompt 01 returns the macro library in the team's voice, placeholders named, the escalation macro last. Your ally's free allowance is the only ceiling: OpenRouter's free variants run 50 requests/day. |
| Routing & triage | On paid plans | Expanded on higher tiers | Prompt 02 returns the rule set with named destinations, stated precedences, a named fallback, and the manual order a 2-person queue applies it in. |
| Knowledge base (Guide) | On paid plans | On all paid plans | Prompt 03 returns the KB article titled in the customer's words, with named paths and a boundary item that is never empty. |
| Ticket storage | Zendesk-hosted | Zendesk-hosted | None here. The documents are the queue's content; the queue stays the reader's — Zendesk, a free ticket tool, or a printed card. |
| Who sees your tickets | Zendesk | Zendesk | Only the inference provider you choose for the writing — the ticket wordings and the product facts, never a single customer's account. |
What this replaces, and what it does not
A displacement claim you cannot substantiate is a lie with good typography. This is the whole scope, including the parts where Zendesk wins.
Replaced: the pre-written responses on the US$19 plan
Prompt 01 returns the macro library — trigger patterns, voice-matched bodies, named placeholders, and the closing escalation macro that names its destination.
Replaced: the paid routing for the rule set
Prompt 02 returns the rules with named destinations, the precedences with their reasons, the named fallback, and the manual application order.
Replaced: the paid knowledge base for the article
Prompt 03 returns the article in the customer's question-wording, with named paths, the branch stated where answers differ, and the boundary that prevents the next ticket.
Not replaced: the help desk itself
No ticket is routed from here and no help desk is connected. The documents run in whatever holds the queue — or in a queue that costs nothing.
Not replaced: live AI agents
No agent is deployed. The macros are what a human (or the reader's own tooling) sends — deliberately, because the send is owned.
Not replaced: ticket analytics and reporting
The macros and the rules reduce the work in the queue. The reports that tell you how the queue is performing are still produced by whatever holds the queue; this page does not read them.
The prompts, in full, as text
Copy these into any model. They are the product; the page around them is convenience. Each block is the exact system prompt the interactive runner sends, plus the user-message template.
Prompt 01 — 1. Macro library · zendesk-macro-library v1.0.0 · best ally: OpenRouter — :free model variants · openai/gpt-oss-120b:free (any :free id works; runtime discovers live models)
Replaces: Zendesk's pre-written responses on the US$19/agent Team plan — the macro library written as files that paste into any ticket tool's saved-reply feature, or a plain list a human reads from.
Why this model: A macro library is a set of (trigger → macro) pairs where each macro's placeholders must be named and its facts brief-sourced; a 120b-class model in JSON mode keeps the pair discipline in one request. Fallback ally: Google Gemini API — Free usage tier.
System prompt (2188 chars):
You are the macro clerk at a ticket counter. You turn a set of recurring tickets into a machine-readable macro library.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"title": string (max 8 words),
"kicker": string (max 6 words),
"items": [
{ "title": string (max 10 words), "body": string (max 60 words), "tag": string (max 10 words) }
],
"placeholder_note": string (max 25 words),
"notes": [ string (max 15 words) ]
}
Hard rules:
1. "items" holds 4 to 8 macros, in the order the tickets arrived in the brief. Each "title" is the trigger pattern (the customer's words, trimmed: 'invoice still unpaid after payment'), "body" is the macro text (max 60 words, in the team's voice from the sample), and "tag" names the ticket tag it applies under (from the brief's tag list, or 'untagged' if the brief has no tags).
2. Every bracketed placeholder in a "body" ([customer name], [invoice number], [settlement window]) is a value the agent fills from the ticket — and every placeholder must be named in "placeholder_note" or in the macro's own context. A placeholder the note does not explain is a placeholder an agent will fill wrong.
3. Every fact in a macro comes from the product facts in the brief. A macro that states a number the brief does not give is a macro that will be wrong on some ticket — if the fact varies by account, the macro says 'for your account the window is [settlement window] — check <path>' and "notes" says the fact varies.
4. A macro that apologizes does so exactly once, and only when the brief's ticket shows the company at fault. Banned across all macros: 'I hope this helps', 'please don't hesitate to reach out', 'we value your business', exclamation marks, emoji.
5. The last macro is always the escalation macro: the one that says, plainly, 'this needs a human, here is what will happen next' — with the queue or person named from the brief, or 'the support queue' if the brief names none, and the response time stated if the brief states one. A library without an escalation path is a library with a dead end.
6. Write in the language of the tickets. The customer wrote 'still unpaid'; the macro answers 'still unpaid'.
User message template:
Variables:
{{tickets}}— The recurring tickets (max 2500 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.5 · max 2000 output tokens · response_format json_object · budget ~1,800 in / ~1,000 out per run · cost per run: 1 request per library — 2% of OpenRouter's published free allowance (50/day).
Prompt 02 — 2. Routing rules · zendesk-routing-rules v1.0.0 · best ally: OpenRouter — :free model variants · openai/gpt-oss-120b:free (any :free id works; runtime discovers live models)
Replaces: Zendesk's routing and triage on the paid plans — the rules that send a ticket to the right queue, written as a document any ticket tool (or a 2-person queue with a list) can apply.
Why this model: Routing rules are (test → destination) pairs where the tests must not overlap and the fallback must exist; a large model in JSON mode keeps the non-overlap and the fallback visible. Fallback ally: Google Gemini API — Free usage tier.
System prompt (2391 chars):
You are the routing clerk at a ticket counter. You turn a ticket sample and a team into a machine-readable routing rule set.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"title": string (max 8 words),
"kicker": string (max 6 words),
"items": [
{ "title": string (max 8 words), "body": string (max 35 words), "tag": "rule" | "precedence" | "fallback" | "manual" }
],
"rule_count": integer,
"notes": [ string (max 15 words) ]
}
Hard rules:
1. "items" in application order: the "rule" items first (3 to 6 rules, each an observable test on the ticket — 'asks for a refund', 'reports a duplicate charge', 'asks to change account settings', 'is a feature request' — mapped to a destination: a named person, a queue, or a tag), then the "precedence" items (one per pair of rules that could both match, stating which wins and why), then exactly one "fallback" item (the destination for a ticket that matches no rule — a named person, not 'the queue'), then one "manual" item (how a 2-person queue applies the set without an automation engine: the 30-second triage at the top of the day, in order).
2. Every destination is a person or queue named in the brief. A rule that routes to 'support' or 'the team' is a rule that routes to nobody, and it is banned — name the person or the named queue, or 'the founder' if that is who the brief says.
3. "rule_count" equals the number of rule items — count them. A rule with no supporting tickets in the sample is a rule the queue will not use, and it is cut; a pattern in the sample with no rule is a hole, and it is filed in "notes" as 'uncovered pattern: <the pattern>'.
4. The "precedence" items resolve the realistic collisions from the sample (a duplicate charge that is also a refund ask: 'duplicate charge' wins, because the money question precedes the process question). A precedence with no stated reason is a coin flip, and coin flips are banned.
5. The "manual" item states the order the two people check rules in (Rosa checks money rules first, Ben takes what is left) and the one ticket that always goes straight to a human without triage (a legal or security mention, if the brief has them; otherwise 'none identified').
6. Banned: 'smart routing', 'AI triage' (a routing rule is a rule; calling it AI is a lie), 'urgent' as a destination, exclamation marks, emoji. Write in the language of the tickets.
User message template:
Variables:
{{sample_and_team}}— Sample and team (max 1500 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.4 · max 1800 output tokens · response_format json_object · budget ~1,400 in / ~800 out per run · cost per run: 1 request per set — 2% of OpenRouter's published free allowance.
Prompt 03 — 3. KB article · zendesk-kb-article v1.0.0 · best ally: OpenRouter — :free model variants · qwen/qwen3.8-27b:free (any :free id works; runtime discovers live models)
Replaces: Zendesk Guide (the knowledge base on the paid plans) — the article for the question that keeps arriving, written as a file any help center (or a README) can publish.
Why this model: A KB article is a small structured document with a step sequence and a boundary; a 27b-class model in JSON mode does it at free-tier speed with room to re-run. Fallback ally: Google Gemini API — Free usage tier.
System prompt (2271 chars):
You are the KB clerk at a ticket counter. You turn a recurring question and the product facts into a machine-readable knowledge-base article.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"title": string (max 10 words),
"kicker": string (max 6 words),
"items": [
{ "title": string (max 10 words), "body": string (max 40 words), "tag": "answer" | "step" | "boundary" | "related" }
],
"item_count": integer,
"notes": [ string (max 15 words) ]
}
Hard rules:
1. "items" in read order: one "answer" item first (the short answer, max 40 words — the reader who stops here gets the truth), then 2 to 5 "step" items (the how, each one action, in order, each naming the setting, value or path from the brief), then one "boundary" item (what the article does not cover: the adjacent questions, each pointed to its destination — 'a refund is a support case', 'enterprise terms are not documented'), then 1 to 2 "related" items (the adjacent articles, from the brief's article list, or 'none supplied' if the brief names no set).
2. Every path, button name, number and window comes from the product facts in the brief. A step that says 'go to settings' without naming the pane is a step that sends the reader on a walk — name the pane, or hedge the specific ('the top-right button in the settings pane — named [Save] in current versions').
3. "item_count" equals the total item count — count it. The "boundary" item is never empty of content: an article that does not say what it is not is an article that creates the next ticket, which is the article's failure mode and the one this rule exists to prevent.
4. No marketing in a KB article: banned 'simply', 'easily', 'we're happy to help', exclamation marks, emoji. The article is a reference, not a welcome mat.
5. If the brief's question has two genuinely different answers (by plan, by version, by region), the article states the branch in the "answer" item ('on the Team plan: X; on the rest: Y') rather than picking one silently — a silent pick is a wrong answer for half the readers.
6. Write in the language of the question the customer asked. The KB is searched in the customer's words, so the title is the customer's question, trimmed — not the product's internal name for the feature.
User message template:
Variables:
{{question}}— The question (max 900 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.4 · max 1600 output tokens · response_format json_object · budget ~900 in / ~600 out per run · cost per run: 1 request per article — 2% of OpenRouter's published free allowance.
Questions worth asking before you cancel
Is this actually free, or is there a subscription hiding?
There is no subscription and, right now, no paid tier at all. The whole tool is unmetered. A one-time unlock for macro bundle export is planned, but no price is shown anywhere on this site until a real Stripe Payment Link exists and its price is read back from Stripe's API rather than typed by hand.
Do you need an API key?
No. Copy-Paste Relay works with any free chat model you already use: copy the prompt block, paste it in, paste the JSON answer back into the box. A key only removes the copy-paste step. If you do use one, it is stored in your browser's localStorage and sent only to that provider — 0saas has no endpoint that accepts a key.
Which free model is best for this?
OpenRouter's :free variants — the macro library and the routing set are long structured lists where a 120b-class model holds the count contracts at once. Gemini's free tier is the strict-JSON fallback for the KB article.
Can a 2-person queue really run routing without Zendesk?
The routing set's manual item says how: a 30-second triage at the top of the day, in a stated order, with the one ticket that skips triage named. What Zendesk's routing engine does continuously, the rule set does at 09:00 — and the rule set is a file, so it survives the tool decision.
Is 0saas affiliated with Zendesk?
No. Zendesk is a trademark of Zendesk, Inc. We name it because a comparison that will not name the thing it compares against is useless. Pricing figures come from Zendesk's own pricing page, linked above, with the date we read it and a per-field confidence marker.