0saas

Job ticket 681539 · SMB · filing room · no subscription

Airtable's free base holds 1,000 records and 100 runs. Here is the card catalog that designs the base for nothing.

This page is a filing room. You feed it a data problem, a base, or a workflow, a free-tier model returns the base architecture, the view design, or the automation spec as strict JSON, and your browser cards it as spec tables you export as CSV. No base is hosted, no record is stored, nothing is synced — the spec is what you build in Airtable Free's 1,000-record base, and the record budget is designed around that ceiling on purpose. The prompts are printed at the bottom of this page so you keep them even if this site disappears.

Airtable is a trademark of Airtable, Inc. This is an independent, unaffiliated comparison built on Airtable's own published pricing page, linked below. We are not Airtable, and nothing here is endorsed by them.

Filing room — rendered in this browser

Source: noneRendered: 0Uploaded to 0saas: nothing

Sample data is illustrative, not a claim about Airtable. Every Airtable 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 Airtable 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 Airtable's own pricing page says

Read from airtable.com/pricing on 2026-09-17. Fields we could not read are marked unconfirmed rather than filled in with a plausible number.

Airtable Free vs Team vs this page — verified 2026-09-17
The jobFree (1,000 records)Team (US$20/seat)This page + a free-tier model
PriceUS$0 — 1,000 records, 100 runsUS$20 per seat / month (billed annually)US$0 forever. A free-tier key costs nothing; the prompts are yours.
Base designBuild by handBuild by handUnmetered by us — Prompt 01 returns the tables, typed fields and relations, with the record budget computed against the 1,000 ceiling. Your ally's free allowance is the only ceiling: the Gemini free tier's daily base covers many runs.
ViewsBy handBy hand + more viewsPrompt 02 returns the view design — filters stated in real field names, one daily view, the money view and the risk view named.
Automations100 runsExpanded runsPrompt 03 writes the trigger → action set against the 100-run budget: weekly estimates computed, the failure-mode rule first, the cuts named.
Editors5UnlimitedThe spec is a file, not a seat. Six people read the same CSV; the fifth editor's ceiling is a design constraint, not a law of physics.
Who sees your data modelAirtableAirtableOnly the inference provider you choose for the design — the tables and the volume, never a single record.

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 Airtable wins.

Replaced: the 1,000-record ceiling for design

Prompt 01 returns the base with the record budget computed — and when the budget does not fit the free ceiling, the spec says which table carries the growth instead of pretending.

Replaced: the by-hand view work

Prompt 02 returns the view design with filters in real field names, exactly one daily view, and the money and risk views present.

Replaced: the un-budgeted automation counter

Prompt 03 returns the automation set written against the 100-run budget — the estimates computed, the failure-mode rule first, the cuts named.

Not replaced: the live base

No base is hosted, no record is stored. The spec is built in Airtable Free — or in any database that reads a spec — and the tool does its own thing after.

Not replaced: running the automations

The spec is the rule set. Airtable Free runs the automations it hosts; this page designs them.

Not replaced: integrations and API

The base spec describes tables, views and automation rules; the connectors that push data in and pull it out run on Airtable's integration layer, which this page never touches.

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. Base architect · airtable-base-architect v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: Airtable's paid base capacity (1,000 records free; Team at US$20/seat lifts it) — the whole base designed as a spec that fits the free ceiling on purpose.

Why this model: A base is tables with typed fields and relations where every relation must resolve; strict-JSON on the Gemini free tier makes the referential check part of the answer. Fallback ally: OpenRouter — :free model variants.

System prompt (1972 chars):

You are the filing clerk at a filing room. You turn a data problem into a machine-readable Airtable base architecture.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "base": string (max 8 words),
  "kicker": string (max 6 words),
  "tables": [ { "name": string (max 6 words), "fields": [ { "name": string, "type": string, "options": string or null } ], "relates_to": string or null } (1-3 tables) ],
  "record_budget": { "est_records": integer, "fits_free": boolean },
  "first_rule": string (max 20 words),
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. 1 to 3 tables. A base with 5 tables is a base that was designed by fear, not by the data — if the brief implies more, merge the tables that are really views of each other and say the merge in "notes".
2. Field types are exactly: short text, long text, number, currency, date, single select, multiple select, checkbox, link to records, rollup, formula. "options" names the choices for select fields (3-6, concrete, from the brief); for link to records it names the target table — which must exist in this spec. A link to a table that does not exist is a base that cannot be built.
3. "est_records" estimates the first year's record count from the brief's volume (items per week × 52, stated). "fits_free" is true only if the estimate is under 1,000; if it is not, the spec must say which table carries the growth and propose the split (the growing table in its own base) in "notes" — a base designed to outgrow its ceiling in year one is a base designed to cost money, and the spec must say so instead of pretending.
4. "first_rule" is the one data-hygiene rule that matters most (who creates records, what the primary field is, when a record is closed). One rule, stated as a test.
5. No field is 'misc' or 'notes' unless the brief's data actually has free text that fits no other field. Banned: invented fields 'for later', exclamation marks, emoji. Write in the language of the brief.

User message template:

The data problem (what the team tracks, how much, what breaks now): {{data}} The volume (how many items a week, and how long they live): {{volume}}

Variables:

  • {{data}} — The data problem (max 800 chars) sample data shipped with the tool
  • {{volume}} — The volume (max 200 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "base", "kicker", "tables", "record_budget", "first_rule", "notes" ], "properties": { "base": { "type": "string" }, "kicker": { "type": "string" }, "tables": { "type": "array", "minItems": 1, "maxItems": 3 }, "record_budget": { "type": "object" }, "first_rule": { "type": "string" }, "notes": { "type": "array" } } }

Decoding: temperature 0.4 · max 2200 output tokens · responseMimeType application/json · budget ~900 in / ~1,100 out per run · cost per run: 1 request — a rounding error against the Gemini free tier's daily base.

Prompt 02 — 2. View designer · airtable-view-designer v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: The view work that makes a base usable (the grids, calendars and filtered views people build by hand after the base exists) — designed as a spec before the base is built.

Why this model: A view is (name → table → filter → sort → purpose) and the purpose must be checkable; strict-JSON keeps each view's reason stated instead of assumed. Fallback ally: OpenRouter — :free model variants.

System prompt (1725 chars):

You are the view clerk at a filing room. You turn a base's tables and a team's jobs into a machine-readable view design.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "base": string (max 8 words),
  "kicker": string (max 6 words),
  "columns": [ "view", "table", "filter", "sort", "for_who" ],
  "rows": [ [ string, string, string, string, string ] (4-8 rows) ],
  "daily_view": string (max 8 words),
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. 4 to 8 "rows", each one view. "table" must name a table from the base spec in the input — a view on a table that does not exist is a view that cannot be built.
2. "filter" and "sort" are stated in the base's field names ("status is in production", "due date ascending, then client"). A filter that references a field the table does not have is a design error; if the design needs it, the field goes in "notes" as 'missing field: <name>' and the view is written against the closest real field.
3. "for_who" names the person or role from the brief and the one question the view answers ("Jonas — what ships this week?"). A view that answers 'everything' is a view that answers nothing; cut it.
4. "daily_view" names the one view the team opens every morning — the workday view. Exactly one; a team with three daily views has a team with no default.
5. At least one view must be the money view (the invoice or payment state of the records) and at least one the risk view (what is late, blocked, or about to be). If the brief's data has no money or no dates, the rule adapts to the brief's real dimensions and "notes" says which.
6. Banned view names: 'All', 'Everything', 'Main'. Banned: 'important' as a filter. Write in the language of the brief.

User message template:

The base spec (from prompt 1, or the live tables) and the team's jobs: {{base_and_jobs}}

Variables:

  • {{base_and_jobs}} — Base and jobs (max 1500 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "base", "kicker", "columns", "rows", "daily_view", "notes" ], "properties": { "base": { "type": "string" }, "kicker": { "type": "string" }, "columns": { "type": "array" }, "rows": { "type": "array", "minItems": 4, "maxItems": 8 }, "daily_view": { "type": "string" }, "notes": { "type": "array" } } }

Decoding: temperature 0.5 · max 1800 output tokens · responseMimeType application/json · budget ~1,100 in / ~800 out per run · cost per run: 1 request per design — under 1% of the Gemini free tier's daily base.

Prompt 03 — 3. Automation spec · airtable-automation-spec v1.0.0 · best ally: Google Gemini API — Free usage tier · gemini-2.5-flash-lite

Replaces: Airtable's paid automation capacity (100 runs on Free) — the automation set written as a budgeted spec, so the free 100 runs do the maximum work.

Why this model: Automation specs are (trigger → action) rows with a run budget; strict-JSON keeps the budget arithmetic and the trigger ordering visible in the answer. Fallback ally: OpenRouter — :free model variants.

System prompt (1887 chars):

You are the automation clerk at a filing room. You turn a base's workflow and the free run budget into a machine-readable automation spec.

Return ONLY one JSON object. No markdown fences, no commentary.

{
  "base": string (max 8 words),
  "kicker": string (max 6 words),
  "columns": [ "trigger", "action", "est_runs_week", "saves" ],
  "rows": [ [ string, string, integer, string ] (3-7 rows) ],
  "budget": integer,
  "total_est_runs_week": integer,
  "notes": [ string (max 15 words) ]
}

Hard rules:
1. "budget" is the run allowance from the brief (default 100 if the brief says Airtable Free). "total_est_runs_week" is the sum of the "est_runs_week" column — compute it. The weekly budget is budget / 4; if the total exceeds it, cut the lowest-saves rows until it fits and name the cuts in "notes".
2. Every "trigger" is an observable record event (a field changed to X, a date was reached, a record was created). Every "action" is one thing (set a field, send an email to the record's email field, move to a view, add a comment). A trigger that fires on 'sometimes' is not a trigger — it is a hope, and hopes are banned from this table.
3. "est_runs_week" is grounded in the brief's volume (events per week from the stated rate). If the brief gives no rate, use the stated default of 10 events/week and flag it in "notes".
4. "saves" states the one human action the automation removes (a status update, a weekly email, a forgotten reminder). An automation whose "saves" is 'it is convenient' is cut, not listed.
5. The first row must be the automation that prevents the workflow's stated failure mode (the brief names it, or 'records rotting in a status' if it does not). The most important automation goes first, always.
6. Banned: 'smart automation', 'AI' (an Airtable automation is a rule; calling it AI is a lie), exclamation marks, emoji. Write in the language of the brief.

User message template:

The workflow (what happens to records, how often, what goes wrong without help): {{workflow}} The run budget (blank for 100, Airtable Free's monthly allowance): {{budget}}

Variables:

  • {{workflow}} — The workflow (max 700 chars) sample data shipped with the tool
  • {{budget}} — Run budget (max 20 chars) sample data shipped with the tool

Output schema (the answer must match this exactly):

{ "type": "object", "required": [ "base", "kicker", "columns", "rows", "budget", "total_est_runs_week", "notes" ], "properties": { "base": { "type": "string" }, "kicker": { "type": "string" }, "columns": { "type": "array" }, "rows": { "type": "array", "minItems": 3, "maxItems": 7 }, "budget": { "type": "integer" }, "total_est_runs_week": { "type": "integer" }, "notes": { "type": "array" } } }

Decoding: temperature 0.35 · max 1700 output tokens · responseMimeType application/json · budget ~900 in / ~800 out per run · cost per run: 1 request per spec — under 1% of the Gemini free tier's daily base.

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 base migration 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?

The Gemini free tier — the base's referential integrity (every relation resolves) and the budget arithmetic are the jobs the strict-JSON path makes checkable. OpenRouter's :free variants are the second check on the views.

What happens when I outgrow 1,000 records?

The spec tells you before it happens: the record budget estimates year one from your stated volume, and if it does not fit, the design splits the growing table into its own base — which is a design decision you make now, as a file, instead of discovering it as a paywall.

Is 0saas affiliated with Airtable?

No. Airtable is a trademark of Airtable, Inc. We name it because a comparison that will not name the thing it compares against is useless. Pricing figures come from Airtable's own pricing page, linked above, with the date we read it and a per-field confidence marker.

Next on the ledger