Back to Blog
Social Media

How to Tell If an Instagram or TikTok Post Is an Ad

July 12, 2026
8 min read
S
By SociaVault Team
InstagramTikTokAd DetectionPaid PartnershipAd LibraryBrand Safety

How to Tell If an Instagram or TikTok Post Is an Ad

Some sponsored posts wear it on their sleeve, the little "Paid partnership" tag, a #ad shoved in the caption. Plenty don't. A creator gushing about a skincare brand they "just discovered" might be doing it for free, or might have been paid four figures for exactly that sentence. If you're vetting an influencer, tracking a competitor's spend, or just trying to keep your own brand's disclosures clean, you need a way to tell the difference that doesn't rely on vibes.

Here's the thing most guides skip: "promoted" isn't one thing. It's two, and they leave different fingerprints.

The two meanings of "promoted"

A paid ad is a post the advertiser paid the platform to distribute, the stuff that shows up in your feed from accounts you don't follow, or a creator's post that a brand "boosted." These run through the ad system, which means they're logged in a public Ad Library. That's the reliable trail.

A paid partnership (branded content) is different. The creator posts it to their own audience organically, but a brand paid them to make it. It's not necessarily an "ad" in the platform's ad system at all. The only formal signal is disclosure, either the built-in "Paid partnership with X" label or an #ad/#sponsored tag the creator adds themselves.

So detection splits along the same line: for paid ads, check the Ad Library. For paid partnerships, check the disclosure flags. Do both and you catch most of it.

Instagram: the paid-partnership flags

Instagram's public post data actually carries partnership signals, assuming the creator used Instagram's branded-content tools. When you pull a post (for example through SociaVault's Instagram endpoints), each one comes back with a few booleans worth reading:

const API_KEY = process.env.SOCIAVAULT_API_KEY;
const BASE = "https://api.sociavault.com/v1";

// Pull posts for a hashtag (or a profile) and flag the sponsored ones
async function flagSponsored(hashtag) {
  const res = await fetch(
    `${BASE}/scrape/instagram/search/hashtag?hashtag=${encodeURIComponent(hashtag)}`,
    { headers: { "x-api-key": API_KEY } },
  );
  const json = await res.json();
  if (!json.success) throw new Error(json.error);

  return Object.values(json.data.posts ?? {}).map((post) => ({
    url: post.url,
    user: post.owner?.username,
    paidPartnership: post.is_paid_partnership ?? false,
    isAd: post.is_ad ?? false,
    affiliate: post.is_affiliate ?? false,
  }));
}

Three fields do the work: is_paid_partnership (the "Paid partnership with" label), is_ad (running as a paid ad), and is_affiliate (affiliate/commerce link). If any is true, the post is commercial in some way. Read them defensively with ?? false, older or partial responses may omit them, and treat a missing field as "unknown," not "no."

The honest catch: these flags only fire when the creator uses Instagram's official branded-content toggle. A creator who took the money and posted it as a plain caption with no tag won't light up here. That's not a data problem, it's a disclosure problem, and it's exactly why you don't stop at the flags.

TikTok: lean on the Ad Library and the label

TikTok is where people expect a tidy is_sponsored boolean and get frustrated. I'd rather be straight with you: TikTok's public video data doesn't hand you a single reliable "this is an ad" field the way Instagram's partnership flag does. What you get is the on-screen disclosure (the "Promotional content" / branded-content label creators toggle) and the caption text, both of which are self-reported and easy to skip.

So for TikTok, the dependable move is to check whether the content was actually run as a paid ad. TikTok publishes a Commercial Content Library, and you can query it:

// Check TikTok's ad library for a brand's paid ads
async function tiktokAdsFor(query, region = "US") {
  const res = await fetch(
    `${BASE}/scrape/tiktok-ad-library/search?query=${encodeURIComponent(query)}&region=${region}`,
    { headers: { "x-api-key": API_KEY } },
  );
  return res.json();
}

If a brand's creative shows up there, it ran as a paid ad, full stop. That's a much harder signal to fake than a caption. For the branded-content-but-not-a-formal-ad case, you're left reading the disclosure label and the caption for #ad, #sponsored, #partner, and their many creative misspellings, useful, but treat it as a hint, not proof.

The reliable method: cross-reference the Ad Library

For both platforms, the single most trustworthy answer to "is this promoted?" comes from the Ad Library, because advertisers can't hide paid distribution there the way a creator can quietly omit a hashtag.

  • Meta (Instagram + Facebook): query the Ad Library with /v1/scrape/facebook-ad-library/search. If the advertiser is running the creative as an ad, it's listed, with run dates and the ad copy.
  • TikTok: query /v1/scrape/tiktok-ad-library/search as above.

A practical workflow for vetting a creator's "organic" feed: pull their recent posts, flag anything where is_paid_partnership or is_ad is true, then search the Ad Library for the brands they mention. A creator whose feed is 60% undisclosed brand mentions that all turn up in the Ad Library is telling you something. We go deeper on the competitive side of this in researching competitor ads at scale.

What this can't do (read this before you trust it)

  • Disclosure is self-reported. Undisclosed sponsorships are against platform rules and FTC guidance, but they happen. No public field can flag a deal nobody disclosed.
  • "Boosted" blurs the line. A creator can post organically, then a brand boosts it later. It may or may not appear in the Ad Library depending on how it was run.
  • Fields shift by platform and response type. Instagram's partnership flags are solid; TikTok's per-video signals are thinner. Handle missing fields instead of assuming false.
  • This isn't legal advice. If you're doing formal compliance or FTC work, use this to triage, not to make final determinations.

None of that makes the approach useless. It makes it a strong triage tool: the flags and the Ad Library together catch the disclosed and the paid, which is the large majority. What's left, the quiet, undisclosed handshake deals, is a smaller pile you can review by hand.

Who actually needs this

  • Influencer vetting. Before you pay a creator, see how much of their "authentic" content is already sponsored, and whether they disclose it. It tells you about their audience's ad fatigue and their own compliance habits.
  • Competitive ad intelligence. Map which creators a competitor is paying and what they're running as ads.
  • Brand safety and compliance. Agencies and platforms checking that partners disclose properly can automate the first pass instead of eyeballing feeds.

Frequently Asked Questions

How can I tell if a TikTok video is sponsored?

Two signals: the on-screen "Promotional content" / branded-content label the creator toggles, and whether the creative appears in TikTok's Ad Library. The Ad Library is the more reliable one, if it's there, it ran as a paid ad. The disclosure label and caption hashtags help but are self-reported.

Does Instagram tell you if a post is an ad?

Yes, when the creator uses Instagram's branded-content tools. Public post data includes is_paid_partnership, is_ad, and is_affiliate flags. If a creator was paid but skipped the official label, those flags won't fire, so pair them with an Ad Library check.

Is there an API to detect paid partnerships?

You can read Instagram's partnership flags programmatically and query the Meta and TikTok Ad Libraries via API. There's no single endpoint that guarantees "this exact post is sponsored" across every case, undisclosed deals aren't in any dataset, but combining the flags with the Ad Library covers the disclosed and paid majority.

What's the difference between a paid ad and a paid partnership?

A paid ad is distributed through the platform's ad system (and logged in the Ad Library). A paid partnership is an organic post the creator was paid to make; it's disclosed via a label or hashtag rather than run as an ad. A single piece of content can be both.

Can I check this for free?

You can test the flags and Ad Library lookups on a new SociaVault account with 50 free credits, each lookup is one credit, so a few dozen checks cost nothing.

Wrapping up

"Is this promoted?" has a clean answer more often than people think, you just have to ask it in two parts. Check the disclosure flags for paid partnerships, check the Ad Library for paid ads, and accept that a small tail of undisclosed deals will always slip through. That's a far better position than scrolling a feed and guessing.

Want to run these checks on real profiles? Start free with SociaVault, 50 credits, no card, and flag your first sponsored posts in a couple of minutes.


Found this helpful?

Share it with others who might benefit

Ready to Try SociaVault?

Start extracting social media data with our powerful API. No credit card required.