Validate public social metrics from one URL.

Paste a TikTok, Instagram or YouTube URL and get normalized JSON for profiles, posts and delivery checks — with freshness metadata, and no contact data.

Try a profile or a post URL from the demo set.

3 platforms4 launch operationsCache hits freeNo contact data
Example response
platformtypecachecredits

One REST API. Four endpoints, no platform-specific learning curve.

resolve takes any supported URL and tells you what it is.profile, profile/posts and post do the obvious thing.

curl https://api.sourcevine.io/v1/profile \
  -H "Authorization: Bearer sv_live_…" \
  --data-urlencode "url=https://www.tiktok.com/@atlas.makes" -G
import os, httpx

r = httpx.get(
    "https://api.sourcevine.io/v1/profile",
    headers={"Authorization": f"Bearer {os.environ['SOURCEVINE_API_KEY']}"},
    params={"url": "https://www.tiktok.com/@atlas.makes"},
)
print(r.json()["metrics"]["followers"])
const r = await fetch(
  "https://api.sourcevine.io/v1/profile?url=" +
    encodeURIComponent("https://www.tiktok.com/@atlas.makes"),
  { headers: { Authorization: `Bearer ${process.env.SOURCEVINE_API_KEY}` } },
);
const { metrics } = await r.json();

TikTok, Instagram and YouTube — done consistently.

We would rather cover three platforms with a response you can rely on than list ten and have half of them return partial data. Each card says what isnot there as plainly as what is.

TikTok

Profiles · Videos · Photo posts

Operations
  • /v1/profile
  • /v1/profile/posts
  • /v1/post
Not at launch

Comments, search, livestream

Profile likes are lifetime totals. Profile views are not reported.

Field coverage →
Instagram

Profiles · Posts · Reels

Operations
  • /v1/profile
  • /v1/profile/posts
  • /v1/post
Not at launch

Stories, private accounts, DMs

Shares and saves are not reported on posts.

Field coverage →
YouTube

Channels · Videos · Shorts

Operations
  • /v1/profile
  • /v1/profile/posts
  • /v1/post
Not at launch

Transcripts, comments, Shorts analytics

Following count is not reported. Channel views are lifetime totals.

Field coverage →

One social data schema. Identical shape on every platform.

Same keys, same types, same place. Where a platform does not report a metric you get an explicit null — never a zero standing in for "unknown", and never a TikTok view quietly equated with an Instagram view.

TikTok
followers482,300
following214
posts618
likes9,140,000
viewsnull
Instagram
followers128,940
following892
posts1,204
likesnull
viewsnull
YouTube
followers1,042,000
followingnull
posts287
likesnull
views214,800,000

Integrate once. Adding a platform later does not change your parsing code.

API pricing per operation, before you write any code.

Credits are charged per operation, so a simple lookup does not subsidise a heavy one. Every operation is priced and published — no quote, no sales call to find out.

OperationReturnsClassTikTokInstagramYouTubeCache hit
POST /v1/resolveProfile or postbasic1110 creditsDocs →
GET /v1/profileProfile + metricsbasic1210 creditsDocs →
GET /v1/profile/postsPost page + cursorlist2320 creditsDocs →
GET /v1/postPost + metricsbasic1210 creditsDocs →

Credits are per live request, and they are not the same on every platform — some upstreams cost us more, and the table says so rather than averaging it. Every response carries freshness, fetched_at andcache_age_seconds, so you always know which column you paid for.

Cost calculator: work out the API bill before you commit.

Cache hits are free, so your spend depends on how much of your traffic is repeat lookups. Move the hit rate and watch what happens.

Billable live calls
Estimated credits
Credits avoided by cache
Smallest plan that covers it

An estimate, not a quote. Cache hit rate depends on how much your traffic overlaps — it is not guaranteed, and we would rather show you the lever than promise a number.

Campaign delivery validation: prove the numbers moved.

For agencies, SMM operators and creator-tool builders: a single reading answers nothing. Delivery only exists as the difference between two of them, taken at times you can point to — which is exactly whatsource_timestamp and fetched_at are for.

1 snapshot before2 campaign runs3 snapshot after

Profile followers

1 Aug 2026 to 27 Aug 2026

+2,264▲ 1.8%
Before
128,940
After
131,204

Post views

1 Aug 2026 to 27 Aug 2026

+86,120▲ 20.9%
Before
412,000
After
498,120

Post likes

1 Aug 2026 to 27 Aug 2026

+7,080▲ 20.7%
Before
34,180
After
41,260
MetricBefore1 Aug 2026After27 Aug 2026Change
Profile followers128,940131,204+2,264 ▲ 1.8%
Post views412,000498,120+86,120 ▲ 20.9%
Post likes34,18041,260+7,080 ▲ 20.7%

Two calls, one schema, both timestamped. The delta is arithmetic you do — we do not compute it for you, because a number without the two readings behind it is not evidence.

Cache hits cost nothing.

If we already hold a recent copy of what you asked for, you get it forzero credits. You are billed for live fetches, not for asking twice.

freshness: "cached"

Served from a recent copy. Free. This is the default, and for most workloads it is most of your traffic.

freshness: "fresh"

Fetched live from the source. Billed at the operation's credit cost.

Every response also carries source_timestamp,fetched_at and cache_age_seconds, so you always know how old a number is. We do not claim real-time, because we cannot prove it.

Usage dashboard: see what you spent, and what the cache saved.

Usage by operation, live versus cached, and every request in a log you can export. Credits in, credits avoided — no guessing at the invoice.

app.sourcevine.ioSample account · illustrative
Credits used
1,240
this period
Credits avoided
860
by cache hits
Requests
2,100
this period
API keys
2
production, staging
Recent requests Export CSV
14:02:11GET /v1/profiletiktokcached0
14:02:09GET /v1/postyoutubefresh1
14:01:55GET /v1/profile/postsinstagramfresh2
14:01:48POST /v1/resolvetiktokcached0
14:01:31GET /v1/profileinstagramcached0
Top operations
  • GET /v1/profile62%
  • GET /v1/post24%
  • GET /v1/profile/posts9%
  • POST /v1/resolve5%

Privacy by design: no contact data, ever.

Public metrics are what we return. Contact details are not fetched, not stored and not returned — which costs us fields some providers sell as a feature. That is the trade, made on purpose.

Raw upstream payloads are never written to disk. Responses are assembled from an explicit field allowlist, so a field we did not choose to expose cannot appear by accident.

Never returned
  • Email addresses
  • Phone numbers
  • Postal addresses
  • Profile bios
  • Private accounts
  • Cross-platform identity matching

Social data API pricing: pay for live fetches, not for asking twice.

Credits are charged per operation — simple lookups cost less than list and derived calls. Cache hits are free on every plan.

Free
$0
1,000 credits

Enough to finish an integration, not a toy.

  • All operations
  • 30 requests/min
  • No card required
Start free
Growth
$49/mo
25,000 credits / mo

$1.96 per 1,000 credits.

  • All operations
  • 240 requests/min
  • Cache hits free
  • Usage export
Choose Growth

Higher volume

Production workloads above 25,000 credits a month are priced per account so the rate matches your actual operation mix. Tell us what you are building and what volume you expect.

Talk to us

Questions worth answering properly.

Where does the data come from?

Publicly visible profile and post information from TikTok, Instagram and YouTube, retrieved through upstream data providers and normalized into a single schema. Nothing behind a login, nothing from a private account, and no contact details at any point.

What does a credit cost, and what uses one?

Credits are charged per operation. A simple profile or post lookup costs one; list operations such as recent posts cost two; heavier derived operations cost more. A cache hit costs zero. You are billed for live fetches, so repeated checks on the same resource are cheap.

How fresh is the data?

Every response carries source_timestamp, fetched_at and cache_age_seconds, so you can see exactly how old a figure is. Cached results are served within a short window that varies by resource type; you can force a live fetch when you need one. We do not advertise real-time, because upstream behaviour does not let us prove it.

Why is there no bio field?

Creator bios routinely contain email addresses, phone numbers and messenger handles. Returning them would mean storing contact details for people who never dealt with us, so the field is excluded from the schema entirely rather than filtered after the fact.

What happens when a profile or post no longer exists?

You get a typed availability status — not_found, private or unavailable — rather than an ambiguous error, and you are not charged. Our upstream bills us for those lookups; that cost is ours, not yours.

What if I run out of credits mid-integration?

Requests keep working and bill as overage at a higher per-credit rate — nothing gets cut off mid-run. Set a balance alert at a threshold you choose, or turn on automatic top-up so it never comes up.

Can I use this for anything I like?

Within the acceptable use policy. Building profiles of private individuals, contact enrichment, and redistributing bulk personal data are not permitted. The product is scoped to public metrics for business and campaign use.

Which platforms are coming next?

Coverage expands where upstream reliability supports it. We would rather do three platforms consistently than list ten and have half of them return partial data — so we announce a platform when the normalized response for it is stable.

Paste a URL. Get JSON back.

The free tier is sized to finish a real integration, not to tease one. No card required.