Social data should be boring
Why we built Social Fetch as infrastructure—predictable JSON, one integration, and failures you can actually debug.
If your product touches social networks—analytics, creator tools, brand safety, research—you have probably watched “fetch public posts” turn into a permanent science project. New edge cases every week. JSON that changes shape when you blink. PagerDuty at 2 a.m. because a selector moved.
We are building Social Fetch because that work belongs in an API layer, not in your roadmap forever.
The pitch in one breath
One REST surface, 20+ platforms, responses you can rely on, and a requestId on every call so support can help without séances.
The boring manifesto
“Exciting” social integrations are a trap. What you want is boring: stable field names, documented errors, keys you can rotate, and metering that matches how you ship.
Three bets we are making
- Product teams outrank scraper cosplay. You are shipping features, not maintaining headless browsers for fun.
- Unified beats one-off. One integration path beats N slightly different provider hacks—especially when you add a platform.
- Support is part of the API. If we cannot debug it with a request ID, we did not finish the job.
The best social data pipeline is the one your future self does not recognize in the git blame.
Smoke test without drama
Before you touch metered routes, hit GET /v1/whoami. It validates your key and does not charge credits—same idea as our Quickstart.
curl -sS -H "x-api-key: $SOCIALFETCH_API_KEY" \
"https://api.socialfetch.dev/v1/whoami"Here is the same idea in TypeScript—note the x-api-key header (not a browser token, not a Bearer shortcut):
const origin =
process.env.SOCIALFETCH_API_ORIGIN ?? "https://api.socialfetch.dev";
const res = await fetch(`${origin}/v1/whoami`, {
headers: {
"x-api-key": process.env.SOCIALFETCH_API_KEY ?? "",
},
});
if (!res.ok) {
const err = await res.json().catch(() => ({}));
throw new Error(
`whoami failed: ${res.status} ${JSON.stringify(err)}`,
);
}
const body = await res.json();
console.log(body.meta?.requestId, body.data);What to look for in the envelope
Successful bodies wrap payloads with meta (think requestId, creditsCharged, version info). Errors follow the same pattern so you are never guessing what to paste into a support ticket.
meta.requestId— bring it when something looks wrong.- Typed error bodies — see Errors for shapes and retry hints.
- Credits — metered routes line up with Credits and Pricing.
Headers matter
Keys use the sfk_ prefix and travel in x-api-key. Full detail: Quickstart.
Do not ship keys to clients
Browser bundles and mobile apps are the wrong place for API secrets. Call Social Fetch from your backend or worker.
| If you are optimizing for… | You probably want… |
|---|---|
| Time to first successful pull | Quickstart + whoami |
| Predictable failure handling | Errors + retries |
| Cost planning | Pricing + meta.creditsCharged |
When scraping still wins
Sometimes a bespoke scraper is the right tool—one weird page, a proof of concept, a fire drill. We are not religious about it.
Rule of thumb
When the scope is narrow and human, a script can be fine. When the scope is your product, you want infrastructure: versioning, SLAs, and someone else on pager when platforms change under you.
If you want the deep reference, the generated API reference is the map. For a gentler on-ramp, start with Quickstart.
Where to go next
You have three sensible moves—pick based on what you are holding in your head right now:
- Estimate cost before you promise a customer date → Pricing
- Wire auth and errors before you parallelize fetches → Quickstart, Errors
- Skim the surface area before you design your data model → API reference
Links and pricing
Quickstart
curl, headers, and the whoami smoke test.
Errors
Error envelope, codes, and when to retry.
API reference
Paths, parameters, and generated examples.
Pricing
Credits, packs, and how to think about volume.
If you want a neutral read on fetch itself—timeouts, aborting, the mental model—Mozilla’s guide is still the standard: MDN: Using the Fetch API.
That is the stack we want you on: boring plumbing, interesting product.