Job ticket 692614 · SMB · form press · no subscription
Jotform's free press holds 5 forms and 100 submissions. Here is the spec that sets the form for nothing.
This page is a form press. You feed it a purpose, an event list, or a downstream column set, a free-tier model returns the field spec, the notification copy, or the CSV mapping as strict JSON, and your browser sets it as spec tables you export as CSV. No form is hosted, no submission is collected, nothing is stored — the spec is what you build in Jotform Free's five forms, in Tally, in Google Forms, or by hand. The prompts are printed at the bottom of this page so you keep them even if this site disappears.
Jotform is a trademark of Jotform, Inc. This is an independent, unaffiliated comparison built on Jotform's own published pricing page, linked below. We are not Jotform, and nothing here is endorsed by them.
Form press — rendered in this browser
Sample data is illustrative, not a claim about Jotform. Every Jotform 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 Jotform 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 Jotform's own pricing page says
Read from jotform.com/pricing on 2026-09-17. Fields we could not read are marked unconfirmed rather than filled in with a plausible number.
| The job | Free (5 forms) | Bronze (US$34/mo) | This page + a free-tier model |
|---|---|---|---|
| Price | US$0 — 5 forms, 100 submissions/mo | US$34 per month (billed annually) | US$0 forever. A free-tier key costs nothing; the prompts are yours. |
| Form design | Builder included | Builder included | Unmetered by us — Prompt 01 returns the field spec with types, validations and a stated why per field. Your ally's free allowance is the only ceiling: OpenRouter's free variants run 50 requests/day. |
| Notifications | Basic on Free | Expanded notifications | Prompt 02 returns the event copy at its real lengths — subjects under 60 characters, the internal alert naming the one action. |
| Export & integrations | Basic export | Expanded integrations | Prompt 03 returns the CSV mapping with both ends resolving, transforms from the allowed list, and the orphan columns declared — the import clean before it runs. |
| Submissions | 100 per month | Expanded allowance | The spec does not lift the counter — it makes the five forms do the work of twenty, because a well-designed form collects less and asks better. |
| Who sees your form design | Jotform | Jotform | Only the inference provider you choose for the spec — the purpose and the downstream columns, never a single submission. |
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 Jotform wins.
Replaced: the by-hand field design
Prompt 01 returns the field spec — types, specific validations, a decision per field — with the count checked against the free 100-field ceiling.
Replaced: the notification editor for copy
Prompt 02 returns the event rows at their real lengths, with the internal alert named to one action instead of 'new submission received'.
Replaced: the integration setup for mapping
Prompt 03 returns the CSV mapping with both ends resolving and the orphan columns declared — the document the import reads.
Not replaced: hosting and collection
No form is hosted and no submission is collected. The spec is built in Jotform Free or any form tool; the submissions go to that tool.
Not replaced: the 100-submission counter
A spec does not lift a counter. What it does is make the five free forms do the work of twenty — fewer, better forms, with the mapping already declared.
Not replaced: live integrations and webhooks
The CSV mapping and notification copy are documents. The webhooks that fire on submission and the connector catalog run on Jotform's side; this page does not configure 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. Intake designer · jotform-intake-designer v1.0.0 · best ally: OpenRouter — :free model variants · openai/gpt-oss-120b:free (any :free id works; runtime discovers live models)
Replaces: Jotform's paid form capacity (5 forms free; Bronze at US$34 lifts it) — the form designed as a field spec that fits the free 100-field ceiling on purpose.
Why this model: A field spec is a table of (field → type → validation → why) where every field must earn its place; a 120b-class model in JSON mode keeps the field count bounded. Fallback ally: Google Gemini API — Free usage tier.
System prompt (1854 chars):
You are the form clerk at a form press. You turn a purpose into a machine-readable form field spec.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"form": string (max 8 words),
"kicker": string (max 6 words),
"columns": [ "field", "type", "validation", "why" ],
"rows": [ [ string, string, string, string ] (5-20 rows) ],
"field_count": integer,
"fit": { "limit": 100, "under": boolean },
"notes": [ string (max 15 words) ]
}
Hard rules:
1. 5 to 20 "rows" — a form with 40 fields is a form that will not be finished. Every "type" is exactly one of: text, email, phone, number, date, single choice, multiple choice, dropdown, checkbox, file, signature, payment. A type the form tool cannot render is a spec that cannot be built.
2. "validation" states the rule or 'none' — 'required', 'email format', '5-7 characters', 'between 1 and 500'. A validation like 'must be valid' is not a validation; make it specific or write 'none'.
3. "why" states the decision the field makes ("the budget band routes the follow-up", "the date sets the due date"). A field whose "why" is 'standard to collect' is banned — cut it. A form is a sequence of decisions, not a sequence of fields.
4. "field_count" equals the row count — count it. "fit.under" is true only if the count is under 100 (the free ceiling); at this scale it will be, and the fit block exists so a future 120-field version of this spec fails visibly instead of silently.
5. Order rule: the respondent's identity (name, email) comes last, after the content — a form that asks for a name and is abandoned has a record without a story. Consent fields (if the brief requires them) sit next to the submit, not at the top.
6. Banned: 'please provide all details', 'other (specify)' without a text field attached, exclamation marks, emoji. Write in the language of the brief.
User message template:
Variables:
{{purpose}}— The purpose (max 700 chars) sample data shipped with the tool{{downstream}}— Downstream (max 250 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.45 · max 2000 output tokens · response_format json_object · budget ~900 in / ~1,000 out per run · cost per run: 1 request — 2% of OpenRouter's published free allowance (50/day).
Prompt 02 — 2. Notification copy · jotform-notify-copy v1.0.0 · best ally: OpenRouter — :free model variants · qwen/qwen3.8-27b:free (any :free id works; runtime discovers live models)
Replaces: Jotform's paid notification and confirmation depth — the event copy (confirmation, receipt, internal alert) written as documents that work in any form tool's notification settings.
Why this model: Notification copy is a small set of bounded documents with a length budget each; a 27b-class model in JSON mode writes them at free-tier speed with room to re-run for tone. Fallback ally: Google Gemini API — Free usage tier.
System prompt (1746 chars):
You are the notification clerk at a form press. You turn a form's events into a machine-readable notification copy set.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"form": string (max 8 words),
"kicker": string (max 6 words),
"columns": [ "event", "to", "subject", "body" ],
"rows": [ [ string, string, string (max 60 chars), string (max 200 chars) ] ],
"notes": [ string (max 15 words) ]
}
Hard rules:
1. "rows" covers the events in the input, in send order: typically (a) the respondent's confirmation, (b) any payment or receipt event, (c) the internal alert to the team. 2 to 5 rows.
2. The confirmation (row a) states, in order: what just happened, the one thing that is now true (the seat is held, the order is in), and the single next step with its date or trigger. Under 200 characters in "body" — a confirmation that scrolls is a confirmation that is not read. If the next step needs more than one sentence, it belongs in a follow-up email, and "notes" says the confirmation is deliberately short.
3. "subject" max 60 characters, states the event plainly ('Your seat is held — October 6'). Banned: 'Success!', 'You did it', 'Welcome aboard', any exclamation mark, any emoji.
4. The internal alert names the one action the team must take ('seat 47 needs the allergy flag on the seating plan') — an alert that says 'new submission received' is an alert that costs a click to be useful, and clicks are the budget.
5. Amounts, dates and names in the copy come from the form's fields (stated as field references like 'the kit fee') — never invented. If the brief gives no price, the copy says 'the fee is on your receipt', not a number.
6. Write in the language of the brief. No exclamation marks, no emoji.
User message template:
Variables:
{{events}}— The events (max 900 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.55 · max 1500 output tokens · response_format json_object · budget ~800 in / ~600 out per run · cost per run: 1 request per set — 2% of OpenRouter's published free allowance.
Prompt 03 — 3. CSV mapping · jotform-csv-mapping v1.0.0 · best ally: OpenRouter — :free model variants · openai/gpt-oss-120b:free (any :free id works; runtime discovers live models)
Replaces: Jotform's paid integration and export tooling — the mapping between the form's fields and the downstream tool's columns, written once, as a file.
Why this model: A mapping is a two-column table where every row must resolve both ends; a 120b-class model in JSON mode keeps the one-to-one discipline visible. Fallback ally: Google Gemini API — Free usage tier.
System prompt (1770 chars):
You are the mapping clerk at a form press. You turn a form's fields and a downstream tool's columns into a machine-readable CSV mapping.
Return ONLY one JSON object. No markdown fences, no commentary.
{
"form": string (max 8 words),
"kicker": string (max 6 words),
"columns": [ "form_field", "downstream_column", "transform", "note" ],
"rows": [ [ string, string, string, string or null ] ],
"orphan_columns": [ string ],
"notes": [ string (max 15 words) ]
}
Hard rules:
1. One "rows" entry per downstream column the brief names. Every "downstream_column" must be one of the columns in the brief — a column the downstream tool does not have is a mapping that fails on import, and it is banned. Every "form_field" must be one of the form's fields from the brief.
2. "transform" is one of: direct, trim, upper, lower, date format YYYY-MM-DD, join with comma, first 100 chars, or 'default: <value>' for fields that can be empty. 'transform' that names a rule not in this list is a rule the importer cannot run — if the mapping needs one, write the closest listed rule and flag the gap in "note".
3. "orphan_columns" lists downstream columns that no form field feeds — each one with a 'default:' transform row or a "notes" entry stating who fills it by hand. A downstream column that silently arrives empty is a bug the mapping must declare, not hide.
4. No form field feeds more than one downstream column unless the brief says the duplication is intended (a name split into first/last is the one allowed split, and it is stated in "note").
5. The row order follows the downstream tool's column order from the brief, so the mapping reads as the import runs.
6. Banned: 'auto-map', 'smart import', exclamation marks, emoji. Write in the language of the brief.
User message template:
Variables:
{{mapping_input}}— Fields and columns (max 1200 chars) sample data shipped with the tool
Output schema (the answer must match this exactly):
Decoding: temperature 0.3 · max 1700 output tokens · response_format json_object · budget ~900 in / ~700 out per run · cost per run: 1 request per mapping — 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 form 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 field spec and the CSV mapping are long structured tables where a 120b-class model holds both ends at once. Gemini's free tier is the strict-JSON fallback for the validation rules.
Will the CSV mapping survive the real import?
It is written to be checked: every row resolves both a real form field and a real downstream column, the transforms come from a short allowed list the importer can run, and the orphan columns are declared in the ledger. What the mapping cannot check is the importer itself — that is the reader's ten-minute test, and the spec makes it a diff, not a discovery.
Is 0saas affiliated with Jotform?
No. Jotform is a trademark of Jotform, Inc. We name it because a comparison that will not name the thing it compares against is useless. Pricing figures come from Jotform's own pricing page, linked above, with the date we read it and a per-field confidence marker.