If you're building an agent that works with social content — a research bot, a creator dashboard, a "summarize this post" tool — you keep hitting the same wall: you have a URL, and you want the numbers. How many views? How many likes? When was it posted?
That sounds trivial. It isn't, for one annoying reason: the platforms block datacenter IPs. Your agent runs in the cloud, the cloud's IPs are flagged, and you get a login wall or a CAPTCHA instead of data. Here's a simpler path.
Pulse is a small, free API that does exactly one thing: give it a public post URL, it gives you back the engagement numbers as JSON.
curl "https://pulse.walls.sh/metrics?url=https://www.youtube.com/watch?v=xWnqY2Mav4s"
{
"platform": "youtube",
"views": 34830,
"likes": 1051,
"comments": null,
"shares": null,
"publishedAt": "2026-06-07T17:00:38.000Z",
"title": "I Built Two Apps That Make $120K/Month",
"author": "Starter Story",
"thumbnail": "https://i.ytimg.com/vi_webp/xWnqY2Mav4s/maxresdefault.webp"
}
No signup. No API key. The same shape for every platform — YouTube, X/Twitter, TikTok,
Bluesky, Instagram — so you integrate once and pass in whatever URL your agent has. The shape also
carries shares (X retweets, TikTok shares, Bluesky reposts) where the platform exposes it.
The trick is boring and effective: Pulse runs on a residential IP and reads each platform's own public pages — the same pages a logged-out human sees in a browser. From a datacenter, those pages are walled; from a home connection, they answer normally. Pulse normalizes the result into one clean object.
It's honest about the edges, too. A deleted or private post comes back as a clear
404 content_unavailable — not a fake row of zeros you'd mistake for "no engagement." And
the couple of platforms that genuinely require a login (Threads, LinkedIn) say so
(login_required) rather than pretending.
Got a grid of posts — a channel page, a campaign report? Ask for them all in one request instead of N round-trips:
curl "https://pulse.walls.sh/metrics/batch?url=<a>&url=<b>&url=<c>"
You get back { count, results: [...] }, order preserved, and one bad URL
never fails the batch — mixed post and profile URLs welcome. There's a short server-side cache too, so
repeated lookups are instant.
If your agent runs in an MCP client (Claude Desktop, Cursor, …), you don't need to write a client at all. One line in your config:
{ "mcpServers": { "pulse": { "command": "npx", "args": ["-y", "pulse-mcp"] } } }
Now your agent has four tools — metrics (a URL → its numbers),
metrics_batch (up to 50 at once), history (every fresh fetch records a
snapshot, so it returns a post's growth curve), and profile (a profile URL → followers).
Ask it "how did this video do?" with a link, and it just knows. There's also an
llms.txt and an OpenAPI spec
so an agent can discover the API on its own.
Nothing, for individuals — and it stays that way. Agents that want to pay their own way can do it per call in USDC over x402 (no account, the agent signs each call). There's a Pro plan for commercial/volume use (a higher rate limit), but the free tier is sized to be genuinely useful, not just to evaluate.
Paste a URL into the live box on the home page ·
npx -y pulse-mcp into your MCP client · read the docs.
It's built in public — if your agent needs a number Pulse doesn't return yet, that's exactly the kind
of thing the build loop is looking for.