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.
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'
| In your CSV | In the API |
|---|---|
Whole-number column (42, -3) | numbers |
Decimal column (19.5) | numbers |
true/false column | booleans |
Zero-padded codes (01234, SKUs, ZIP codes) | kept as strings โ no mangling |
id column | your ids are preserved (/people/101 works) |
Quoted values with commas/newlines ("Curie, Marie") | parsed correctly (RFC 4180) |
| Comma, semicolon, or tab delimiter | auto-detected (Excel's semicolon locales work) |
Headers with spaces (First Name) | sanitized to First_Name |
| Empty cells | null |
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.
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):
| SheetDB | Sheety | sheet2api | Mockbird | |
|---|---|---|---|---|
| Signup required | yes | yes | yes | no |
| Needs a Google Sheet | yes | yes | yes (or Excel online) | no โ any CSV/TSV file |
| Free requests | 500 / month | 200 / month | 500 / month | 10,000 / day |
| Free row / API caps | 2 APIs | 100 rows | 2 APIs | 1,000 rows per file (512 KB) |
| Live sheet sync | yes | yes | yes | no โ snapshot import |
| Typed columns (numbers/booleans) | strings by default | partial | partial | yes, automatic |
| Filters / sort / pagination / search | paid tiers for some | basic | basic | all free |
| GraphQL + OpenAPI + TS types | no | no | no | yes |
| Data export / no lock-in | your sheet | your sheet | your sheet | db.json one-URL export |
The import is a snapshot by design (that's what makes it signup-free and fast). Three ways to update:
BASE_URL at it.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 โ