No credit cardStart free
·3 min read·Raw Takes

Any API, One JSON File

You want data from an internal API. Or some niche SaaS tool with 200 customers. Or your own product's backend. You get to us, and realize; there is no pre-built connector and perhaps... never will be unless you get into an expensive enterprise - which we do not do-. So you wait there in front of your screen, lamenting on the state of the world, or you build a pipeline yourself, or - worst case - you export a CSV every Monday 8am like it's good ol' 2014 again.

Alternatively you can write a JSON file

json
{
"version": "1",
"base_url": "https://your-api.com/v1",
"auth": { "type": "bearer" },
"streams": [
{
"name": "users",
"endpoint": "/users",
"data_path": "data",
"primary_key": ["id"]
}
]
}

For us, that's a connector spec. It tells rawquery: this is the URL, this is how you authenticate, this is where the records are, this is how you paginate. And hopefully, tada.

bash
rq connect my-api --spec spec.json --auth-token $TOKEN --schedule daily
# Done. Syncing.

This handles:

Pagination. Rate limits. Auth token refresh. Schema evolution when the API adds a field. Nested JSON flattening. In short; you describe the API, we do our best to handle the plumbing. The spec supports API key, Bearer, OAuth2, and custom auth flows. REST and GraphQL. Cursor, offset, and page-based pagination. If your API does exists and does returns JSON, you can likely connect it. If you can't throw in a mail, we'll look into it.

Why do you even read this?

At it's core, every if not all data tool has the same problem: they ship gazillions of connectors and the one you need is number gazillion +1 . Or it exists but doesn't sync that one field your manager says is your KPI. Or it syncs but does something weird with nested objects. You end up writing scripts and maintaining em' anyway.

In contrast, we ship with 8 built-in connectors for the big stuff we wanted to have (Stripe, Postgres, HubSpot, MySQL, Salesforce, Shopify, Google Sheets). For everything else, you write a JSON spec. No Python. A JSON file and a CLI command. Will we ship more connectors? Maybe. Would you bet your pipes on that? Maybe not. Just write the damn spec.json; if it works, it works.

Honestly, if you can read an API doc, you can write a connector spec. And if you cant read an API doc, your Claude Code, your Gemini agent, your OpenAI agent... or any agent; well, it can do it for you. And that is sort of the point.


Raw Takes Short reads on things we built and why they matter (to us). No thought leadership.