Your spreadsheets, served as a private API.
Upload the CSV or JSON files your business already keeps. Feedvault cleans the values, shows what changed since the last upload, and lets a developer, app or partner query it with their own API key and monthly limit.
Member ID;Name;Email;Joined;Active?;Balance (AED);Country M-104;Aisha Rahman; Aisha.R@Example.COM ;03/11/2025;yes;1.250,50;AE M-105;Omar Haddad;omar@example.com;2025-11-04;Y;1,50;AE M-106;Lena Fischer;LENA@example.net;5 Nov 2025;no;980;DE M-107;Priya Nair;priya@example.org;11/12/2025;1;empty;AE
A typical export, before Feedvault
- Three date formats in one column
yes,Y,noand1for the same question- Comma decimals:
1.250,50and1,50 - Stray spaces and capitals in an email
- An empty balance
member_idstring, key | namestring | emailemail | joineddate | activeboolean | balance_aednumber | countrystring |
|---|---|---|---|---|---|---|
| M-104 | Aisha Rahman | aisha.r@example.comfrom " Aisha.R@Example.COM " | 2025-11-03from 03/11/2025 | truefrom yes | 1250.5from 1.250,50 | AE |
| M-105 | Omar Haddad | omar@example.com | 2025-11-04 | truefrom Y | 1.5from 1,50 | AE |
| M-106 | Lena Fischer | lena@example.netfrom LENA@example.net | 2025-11-05from 5 Nov 2025 | falsefrom no | 980 | DE |
| M-107 | Priya Nair | priya@example.org | 2025-12-11from 11/12/2025 | truefrom 1 | nullfrom empty | AE |
curl -G "$FEEDVAULT_URL/v1/data/datasets/ds_8f2c/records" \ -H "Authorization: Bearer $FEEDVAULT_KEY" \ --data-urlencode "filter[country]=AE" \ --data-urlencode "fields=name,email,balance_aed"
Every response says where the data came from and how much of the key's monthly quota is left.
HTTP/1.1 200 OK content-type: application/json x-quota-limit: 10000 x-quota-remaining: 9874 { "dataset": { "id": "ds_8f2c", "name": "Members", "provenance": { "sourceType": "csv_upload", "note": "Export of our membership CRM", "rightsAttested": true, "rightsAttestedAt": "2026-11-05T09:10:31.000Z", "lastImportId": "imp_41ad", "lastImportAt": "2026-11-05T09:12:04.000Z" } }, "records": [ { "key": "M-104", "data": { "name": "Aisha Rahman", "email": "aisha.r@example.com", "balance_aed": 1250.5 }, "sourceImportId": "imp_41ad", "ingestedAt": "2026-11-05T09:12:04.000Z", "updatedAt": "2026-11-05T09:12:04.000Z" }, { "key": "M-105", "data": { "name": "Omar Haddad", "email": "omar@example.com", "balance_aed": 1.5 }, "sourceImportId": "imp_41ad", "ingestedAt": "2026-11-05T09:12:04.000Z", "updatedAt": "2026-11-05T09:12:04.000Z" }, { "key": "M-107", "data": { "name": "Priya Nair", "email": "priya@example.org", "balance_aed": null }, "sourceImportId": "imp_41ad", "ingestedAt": "2026-11-05T09:12:04.000Z", "updatedAt": "2026-11-05T09:12:04.000Z" } ], "page": { "limit": 25, "offset": 0, "total": 3, "hasMore": false, "nextCursor": null, "sort": "_key", "order": "asc" }, "usage": { "key": { "used": 126, "quota": 10000, "remaining": 9874, "period": "2026-11" } } }
From a file on your laptop to an API in five steps
No database to set up and no code to write until you query it. Upload a newer export whenever the data changes.
Upload
Add a CSV (comma, semicolon or tab separated, UTF-8) or a JSON array of objects, and confirm you own it or are licensed to use it.
Clean
Feedvault detects each column's type and normalises dates, emails, yes/no values and numbers. Rows that don't fit are listed with the reason.
Review the schema
Rename columns, change types, choose the key column, and decide which columns are required and searchable.
Create a key
Give each developer, app or partner their own API key with a monthly request quota and a per-minute rate limit.
Query
Search, filter, pick fields, sort and page through records over HTTPS. Re-upload and see which records were created, updated or unchanged.
- 03/11/2025 5 Nov 2025
- becomes 2025-11-03 2025-11-05
- Dates in ISO format. Day-first or month-first is detected from your values, and you can set it.
- yes Y on 1
- becomes true
- Yes/no columns become real booleans.
- 1.250,50 1,50 (42)
- becomes 1250.5 1.5 -42
- Comma decimals, thousands separators, currency signs and accounting negatives.
- " Aisha.R@Example.COM "
- becomes aisha.r@example.com
- Emails trimmed, lowercased and checked. Empty cells become null.
One endpoint per dataset, with predictable parameters
Send the key as Authorization: Bearer … or an x-api-key header. Keys can only read datasets that belong to your organisation.
GET /v1/data/datasets/{datasetId}/recordsResponses carry x-quota-limit and x-quota-remaining headers, plus the dataset's provenance and the key's usage for the month.
Errors are JSON with a code and a plain message: 400 invalid_query names the unknown column or bad value, 402 key_quota_exceeded when a key's monthly quota is used up, and 429 with a retry-after header when the per-minute rate limit is hit.
| Parameter | What it does |
|---|---|
filter[column]=value | Exact match on a column in your schema, checked against its type. Up to 10 filters. |
q=text | Search across the columns you marked searchable. Every word must match. |
fields=a,b,c | Return only these columns. |
sort=column&order=desc | Sort by any column, or by _key, _ingested_at or _updated_at. |
limit=25 | Page size, 1 to 100. |
cursor=… or offset=… | Next page. The response gives you page.nextCursor and page.total. |
Keys, quotas and alerts you control
Share access without sharing the spreadsheet. Each key is metered on its own, so you can see who uses what.
One key per consumer
Create a key for each app, developer or partner. Revoke it at any time and only that consumer loses access. A key can read every Feedvault dataset in your organisation, so give partners their own.
Monthly quota and rate limit
Set how many requests a key may make each month and per minute. When the quota is used up the key stops working until the next month; your other keys are unaffected.
Usage alerts
Pick a percentage of the quota. When a key crosses it, an alert appears in the app once that month. Alerts are not emailed yet.
Your data, your rights
Feedvault is for data you already have the right to share.
Feedvault does not crawl or scrape websites. There is no feature for it, and there won’t be.
- You confirm your rights on every dataset and uploadCreating a dataset and uploading a file both require you to confirm you own the data or are licensed to use it, with a note on where it came from.
- Provenance travels with the dataEach record shows which import it came from and when, and every API response includes the dataset's source note and attestation date.
- Connections only with your permissionFuture connectors will use your own account credentials or a feed you are licensed to use, and each one is reviewed before it is offered.
- Export or deleteYour organisation's datasets are included in its data export, and deleting a dataset removes its records.
What works today, and what doesn't yet
Feedvault is in beta. This list is kept honest so you can decide whether it fits now.
Available now
- CSV and JSON uploadsComma, semicolon or tab separated CSV in UTF-8; JSON arrays of objects.
- Cleaning, type detection and schema review
- Change tracking between uploadsEach record is marked created, updated or unchanged.
- Search and filter API with per-key quotas and rate limits
- Usage alerts in the app
Not available yet
- Live connectors to other systemsNo syncing from CRMs, databases or other apps yet. Upload CSV or JSON files instead.
- Change notifications to other systems (webhooks)Changes are recorded for each upload, but nothing is sent to other systems yet.
- Email alertsUsage alerts appear in the app only. No emails are sent.
- Paid plansPricing is set at launch. The beta is free.
Plans, by how much data you move
Prices will be published at launch. During the beta, everyone is on the free plan.
| Limit | FreeFree during the beta | StarterPricing at launch | ProPricing at launch |
|---|---|---|---|
| Rows imported per month | 10,000 | 250,000 | 2.5 million |
| API requests per month | 10,000 | 250,000 | 2.5 million |
| Storage | 100 MB | 2 GB | 20 GB |
Questions
Do you scrape websites?
No. Feedvault only works with files you upload and confirm you own or are licensed to use. It does not crawl, scrape or collect data from websites, and there is no feature for it.
Which files can I upload?
CSV files separated by commas, semicolons or tabs (including Excel exports) in UTF-8, and JSON files containing an array of objects or {"records": [...]}.
How does it handle 03/11 vs 11/03 dates?
If any value in your file has a day above 12, the order is detected from that. Otherwise it defaults to day-first, which is common in the UAE, and you can switch it to month-first when you review the schema.
What happens when I upload a newer version?
Records are matched on the key column you chose. Each one is marked created, updated or unchanged, so you can see exactly what the new export changed.
Can Feedvault pull data from my CRM or database automatically?
Not yet. Live connectors are not available; for now you upload CSV or JSON exports. Any future connector will use your own credentials or a licensed feed.
Will other systems be notified when data changes?
Not yet. Feedvault records what changed with each upload, but it does not send webhooks or other notifications to outside systems.
Who can query my data?
Only requests that carry one of your organisation's API keys. Each key has its own quota and rate limit, and you can revoke it at any time.
What does it cost?
The beta is free. Prices for the Starter and Pro plans will be published at launch, before anyone is charged.
Hear when Feedvault launches
You can start uploading during the beta today. Join the list if you'd like an email when paid plans and connectors arrive.