โ† All guides

Turn a CSV into a REST API in one curl (free, no signup)

You have a spreadsheet export โ€” a product list, a roster, survey results โ€” and you want to hit it as an API: fetch it from a frontend, filter it, page through it, maybe write to it. The usual suspects for this job (SheetDB, Sheety, sheet2api) all want you to sign up first, connect a Google Sheet, and live inside free tiers measured in a few hundred requests per month.

If what you actually have is a CSV file, there's a shorter path. One curl, no account:

curl -X POST 'https://HOST/api/projects/import?resource=people' \
  -H 'content-type: text/csv' --data-binary @people.csv
# โ†’ {
#     "id": "f69cny6aep",
#     "baseUrl": "https://HOST/m/f69cny6aep",
#     "kind": "csv",
#     "resources": [{ "name": "people", "records": 124,
#                     "fields": ["name","role","team","salary","remote","email","joined"] }]
#   }

Every row is now a record behind a real REST endpoint, with per-column typing already done:

curl 'https://HOST/m/f69cny6aep/people/1'
# โ†’ { "id": 1, "name": "Ada Lovelace", "role": "engineer",
#     "salary": 180000, "remote": true, "email": "ada@example.com",
#     "joined": "2023-04-11" }   โ† salary is a number, remote is a boolean

Prefer a UI? Open /app#import โ€” it drops you straight into the dashboard's import panel: paste rows or pick your CSV file, and the collection is named after the file. No terminal needed.

Query it like a real API

The imported collection gets the full json-server-style toolkit โ€” nothing to configure:

# filter on any column
curl 'https://HOST/m/f69cny6aep/people?remote=true'

# sort + paginate
curl 'https://HOST/m/f69cny6aep/people?_sort=salary&_order=desc&_page=1&_limit=10'

# full-text search across fields
curl 'https://HOST/m/f69cny6aep/people?q=curie'

# project only the fields you need (id always included)
curl 'https://HOST/m/f69cny6aep/people?remote=true&select=name,team'

# writes are real and persist
curl -X POST 'https://HOST/m/f69cny6aep/people' \
  -H 'content-type: application/json' \
  -d '{"name":"New Hire","role":"pm","team":"growth","salary":120000,"remote":true}'

And because it's a normal Mockbird project, you also get a GraphQL endpoint over the same data, TypeScript types / Zod schemas generated from your columns, OpenAPI and Postman exports, CORS on by default, and a request inspector:

# GraphQL over your spreadsheet
curl -X POST 'https://HOST/m/f69cny6aep/graphql' -H 'content-type: application/json' \
  -d '{"query":"{ people(sortBy: \"salary\", order: \"desc\", limit: 2) { name salary } }"}'

# typed client for your columns
curl -o api.ts 'https://HOST/m/f69cny6aep/types.ts'

How rows are typed

In your CSVIn the API
Whole-number column (42, -3)numbers
Decimal column (19.5)numbers
true/false columnbooleans
Zero-padded codes (01234, SKUs, ZIP codes)kept as strings โ€” no mangling
id columnyour ids are preserved (/people/101 works)
Quoted values with commas/newlines ("Curie, Marie")parsed correctly (RFC 4180)
Comma, semicolon, or tab delimiterauto-detected (Excel's semicolon locales work)
Headers with spaces (First Name)sanitized to First_Name
Empty cellsnull
Cells containing JSON (["a","b"])parsed into real arrays/objects

Coming from Excel or Google Sheets: File โ†’ Download โ†’ Comma Separated Values (or Save As โ†’ CSV in Excel), then POST the file. TSV exports work too.

Honest comparison: SheetDB, Sheety, sheet2api

These tools solve a different shape of the same problem: they keep a live two-way link to a Google Sheet, so non-developers can edit data in the sheet and the API reflects it. If your team's source of truth genuinely lives in a Google Sheet, they're the right category โ€” Mockbird imports a snapshot of your file, and edits afterwards happen through the API (re-import any time to refresh, or eject with db.json).

But if you just have a CSV and want an API for a prototype, demo, workshop, or frontend build, compare the free tiers (verified July 2026):

SheetDBSheetysheet2apiMockbird
Signup requiredyesyesyesno
Needs a Google Sheetyesyesyes (or Excel online)no โ€” any CSV/TSV file
Free requests500 / month200 / month500 / month10,000 / day
Free row / API caps2 APIs100 rows2 APIs1,000 rows per file (512 KB)
Live sheet syncyesyesyesno โ€” snapshot import
Typed columns (numbers/booleans)strings by defaultpartialpartialyes, automatic
Filters / sort / pagination / searchpaid tiers for somebasicbasicall free
GraphQL + OpenAPI + TS typesnononoyes
Data export / no lock-inyour sheetyour sheetyour sheetdb.json one-URL export

Refreshing the data

The import is a snapshot by design (that's what makes it signup-free and fast). Three ways to update:

This page is written by the Mockbird maker โ€” bias disclosed. SheetDB / Sheety / sheet2api free-tier numbers checked July 2026 against their public pricing pages and docs; all three are solid choices when a live Google Sheet is your source of truth. Anonymous Mockbird projects have a per-IP daily creation cap and free accounts are, well, free โ€” sign up to keep projects permanently. Upload limit: 512 KB per CSV.

Full import reference in the docs. More guides: json-server, hosted ยท mock server from OpenAPI ยท free GraphQL mock API. Create your API โ†’