Engagement rate is likes plus comments divided by views (or by follower count, depending on the formula). Most analytics platforms make you log in, authorize OAuth, and wait for data to sync before you can calculate it. Pulse gives you views, likes, and comments for any public post with one GET request — compute the rate yourself in one line of code.
Two common definitions:
Pulse gives you all three numbers — views, likes, comments — plus the author's
follower count if you call /profile too. Pick the formula that fits your use case.
import requests
url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
r = requests.get("https://pulse.walls.sh/metrics", params={"url": url})
m = r.json()
# Rick Astley — Never Gonna Give You Up: 1.78B views, 19.1M likes
er = (m["likes"] or 0) / m["views"] * 100 if m.get("views") else None
print(f"Views: {m['views']:,}, Likes: {m['likes']:,}")
print(f"Engagement rate (by views): {er:.2f}%")
Views: 1,781,803,241, Likes: 19,151,099 Engagement rate (by views): 1.08%
import requests
post_url = "https://x.com/elonmusk/status/1932200000000000000"
profile_url = "https://twitter.com/elonmusk"
m = requests.get("https://pulse.walls.sh/metrics", params={"url": post_url}).json()
p = requests.get("https://pulse.walls.sh/profile", params={"url": profile_url}).json()
engaged = (m.get("likes") or 0) + (m.get("comments") or 0)
er = engaged / p["followers"] * 100 if p.get("followers") else None
print(f"Engagement rate (by followers): {er:.4f}%")
import requests
urls = [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://bsky.app/profile/someone.bsky.social/post/abc123",
"https://www.tiktok.com/@creator/video/123456",
]
r = requests.get("https://pulse.walls.sh/metrics/batch", params={"urls": ",".join(urls)})
for item in r.json()["results"]:
if "error" in item:
print(f"{item['url']}: {item['error']}")
continue
er = ((item.get("likes") or 0) + (item.get("comments") or 0)) / item["views"] * 100 if item.get("views") else None
print(f"{item['platform']}: views={item['views']:,}, er={er:.2f}%" if er else f"{item['platform']}: no views")
| Platform | views | likes | comments | shares |
|---|---|---|---|---|
| YouTube | ✓ | ✓ | — | — |
| X / Twitter | ✓ | ✓ | ✓ | ✓ (retweets) |
| TikTok | ✓ | ✓ | ✓ | ✓ |
| Bluesky | — | ✓ | ✓ | ✓ (reposts) |
| Mastodon | — | ✓ | ✓ | ✓ (boosts) |
| ✓ (est.) | ✓ | ✓ | — |
Bluesky doesn't expose a view count publicly. For Bluesky
engagement rate, use the follower-count formula. A missing field returns null — filter
before dividing.
Free: 120 calls/minute, no account or signup needed. For commercial analytics pipelines or higher volume, the $19/mo Pro plan raises the ceiling to 1,200 calls/minute (10×) — see pricing or sign up at /account.
More: full API docs · OpenAPI spec · all supported platforms · YouTube metrics · X/Twitter metrics · TikTok metrics.
Need more than 60 calls/day?
Pulse Pro — 10,000 calls/month for $19/mo. No OAuth, no webhooks, just curl. Cancel any time.
Get a free API key →Free tier: 60 calls/day · Pro: 10k/month · takes 30 seconds