Brand Deal Check - Who Is Actually Getting Paid? avatar

Brand Deal Check - Who Is Actually Getting Paid?

Pricing

from $7.00 / 1,000 brand collaboration item collecteds

Go to Apify Store
Brand Deal Check - Who Is Actually Getting Paid?

Brand Deal Check - Who Is Actually Getting Paid?

See who is actually getting paid, and by who. Every paid partnership tag, branded content label and sponsor mention on a creator's posts - the deals they announced and the ones they did not.

Pricing

from $7.00 / 1,000 brand collaboration item collecteds

Rating

0.0

(0)

Developer

Tarek Etman

Tarek Etman

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

reapX - the record of what changed

Brand Deal Check - Who Is Actually Getting Paid?

"They swore this was their first deal in the category. Was it?"

You are about to sign a creator, or renew one, or explain to a client why last quarter's spend went nowhere. The media kit says one thing. Their last thirty posts say another, and nobody has time to open thirty posts and read every caption.

So you get the answer instead. Drop a handle in and you get back, in one sentence per post, who they name, whether they marked it as an ad, and the number nobody hands you: what a brand post on that account is actually worth compared to a post they made for themselves.

The sentence you get back

This is a real row from a real run, not an illustration:

@gymshark names @Belcast in this caption and there is no ad marker on it. It has 847K views, and their brand posts land within a few percent of their own, so the audience treats them the same. For every 100 people following @gymshark, a post naming a brand reaches about 1.7 of them - that is the number to divide their rate by, and the one that compares to anyone else you are looking at. Across the 13 posts read here 5 name a brand and 5 of those carry no marker.

Read it once and you have the negotiation. Paste it into a deck and every number in it is a field on the same row, so it survives being questioned.

And when a creator is clean, it says so in the same voice, because "this one tags their deals and here is how I know" is half the reason you asked:

@creator's caption reads as their own, with no brand named and no ad marker. Across the 13 posts read here every one of the posts naming a brand is marked, so this is a creator who tags their deals.


The three numbers you came here not knowing you could get

Anyone can list which posts mention a brand. These are the ones that decide money.

1. What their brand posts do against their own posts. brandPostViewGapPct is the median of every post where they name a brand, against the median of the posts where they do not. A creator whose sponsored work runs 40% below their organic work is selling you a follower count they cannot deliver against, and it never shows up in a media kit. When it runs above, that is a creator whose audience does not tune out the ads, and that is worth paying more for.

2. The one figure that carries to the next creator on your list. brandPostReachPerFollowerPct - for every 100 people following them, how many actually see a post that names a brand. Everything else about a creator is measured against their own baseline and dies there. This one divides straight into a rate card, so you can put four creators with wildly different follower counts on one line and see which one is expensive.

3. How often they mark a deal at all. disclosureRatePct across everything read, plus brandIsRecurring and brandPostCount so you can tell a one-off gift from a standing arrangement with your competitor. That is the category-exclusivity question, answered before the contract rather than after.

Plus the thing that only shows up if someone is looking: a post that named a brand and is not there any more. postAvailable goes false and the row still tells you which brand it named.


⬇️ What you give us

Two fields, and the second one has a sensible default.

FieldWhat to put in it
handlesOrPostsA creator, and we go through everything they have posted lately - a TikTok @handle, or an Instagram one as instagram.com/handle or ig:handle. Or paste links to the exact posts you want checked; Instagram posts and reels and TikTok videos all work. Mix handles and links however you like.
maxPostsA ceiling on the run so a long list cannot surprise you. Defaults to 20.
{
"handlesOrPosts": ["@gymshark", "@lorengray"],
"maxPosts": 20
}

Captions are read exactly as the creator wrote them, hashtags and mentions intact.


⬆️ What comes back

One row per post. The sentence is first; everything under it is the proof.

FieldTypeWhat it is
whatIFoundStringThe answer, written to be read and pasted. Every number in it is a field below.
postIdStringStable per-post key, so you can diff two runs weeks apart.
usernameStringThe account the post belongs to.
followerCountIntegerFollowers on that account when we read it.
platformStringtiktok or instagram.
postUrlStringThe post itself. One click to check us.
postAvailableBooleanFalse when the post is no longer up.
captionStringThe caption as written.
brandNameStringThe brand this post names, when it names one.
brandsMentionedArrayEveryone else named in the same caption.
disclosedBooleanWhether the post carries an ad marker. null when there is nothing to mark.
disclosureTokensArrayThe exact marker found, in the creator's own words.
collabTypeStringpaid_partnership_tag, brand_mention_only or product_seeding.
viewsIntegerViews on this post.
likeCountIntegerLikes on this post.
viewsVsFollowersPctNumberThis post's views as a share of their followers.
brandPostViewsMedianIntegerMedian views across their posts that name a brand.
ownPostViewsMedianIntegerMedian views across their posts that do not.
brandPostViewGapPctNumberThe gap between those two. Negative means brand posts underperform.
brandPostReachPerFollowerPctNumberReach per 100 followers on brand posts. The comparable one.
ownPostReachPerFollowerPctNumberThe same figure on their own posts.
postsReadForCreatorIntegerHow many of their posts this run read.
brandPostsForCreatorIntegerHow many of those name a brand.
disclosedBrandPostsIntegerHow many of those carry a marker.
disclosureRatePctNumberThe share that do.
brandPostCountIntegerHow many posts in this run name this same brand.
brandIsRecurringBooleanTrue when the same brand appears more than once.
viewGapUnavailableReasonStringNamed when the gap could not be computed, so a blank is never a mystery.
checkStatusStringchecked, or the reason we could not read something.
scrapedAtStringWhen we read it.

A real row

From run ycl3mTTfCYRFHJNyr, unedited:

{
"checkStatus": "checked",
"postId": "tt_7660964717631999254",
"platform": "tiktok",
"postUrl": "https://www.tiktok.com/@gymshark/video/7660964717631999254",
"username": "gymshark",
"followerCount": 6600000,
"postAvailable": true,
"brandName": "Belcast",
"brandsMentioned": ["Belcast", "Annabel Lucinda", "Patty", "James Beardwell", "SWOLE", "sawyer_klatt"],
"disclosed": false,
"collabType": "brand_mention_only",
"caption": "Chapter Four: The Return. #onyx #davidlaid #Gymshark @Belcast @Annabel Lucinda @Patty @James Beardwell @SWOLE @sawyer_klatt ",
"views": 847000,
"viewsVsFollowersPct": 12.8,
"postsReadForCreator": 13,
"brandPostsForCreator": 5,
"disclosedBrandPosts": 0,
"disclosureRatePct": 0,
"brandPostViewsMedian": 110000,
"ownPostViewsMedian": 105000,
"brandPostViewGapPct": 4.8,
"brandPostReachPerFollowerPct": 1.7,
"ownPostReachPerFollowerPct": 1.6,
"brandPostCount": 1,
"brandIsRecurring": false,
"whatIFound": "@gymshark names @Belcast in this caption and there is no ad marker on it. It has 847K views, and their brand posts land within a few percent of their own, so the audience treats them the same. For every 100 people following @gymshark, a post naming a brand reaches about 1.7 of them - that is the number to divide their rate by, and the one that compares to anyone else you are looking at. Across the 13 posts read here 5 name a brand and 5 of those carry no marker."
}

How it works

  1. A handle becomes a set of posts. Hand us @handle and we pull their recent posts with the real view and like counts attached, so you never assemble a list yourself.
  2. Every caption is read as written. Ad markers, brand mentions and partnership tags are taken from the creator's own words, and the exact marker we found is returned so you can check it.
  3. A brand mention is checked against the account it belongs to. A name in a caption is a display name, not a handle, and the two are not the same account. We only name a brand we can stand behind.
  4. The set is compared against itself. Once the posts are in, the brand ones and the personal ones are split and their medians compared. That comparison is the whole point and it only exists because we read the set rather than one post.
  5. The sentence is written last, from the fields on that row and nothing else.

❓ FAQ

What do I actually type in?

A TikTok handle. That is the fastest path and it gives you the comparison numbers, because those need the whole set. If you already know the exact posts, paste their links instead.

Why does disclosed come back empty on some rows?

Because there is nothing to mark. A post that names no brand is not an unmarked ad, it is just a post, and saying otherwise about a real person is not something we will do. Empty means the question does not apply.

Can I tell a real partnership from a gift?

brandIsRecurring and brandPostCount are how. One appearance is a seeding drop or a tag. The same brand across several posts in the same window is an arrangement, and that is the one that breaks category exclusivity.

Does this work for checking my own account before a pitch?

That is one of the better uses of it. Run yourself, get brandPostReachPerFollowerPct, and go into the call with the number a brand's own team would compute about you.

How do I compare two creators?

Run both in one go. Per-creator numbers are scoped to that creator, and brandPostReachPerFollowerPct is built to be read across accounts of any size.


💬 Your feedback

Custom brand lists, category conflict rules or a larger pull: reapx at reapxdev@proton.me.


Unofficial and not affiliated with any social platform. Reads what a creator published. Where a value cannot be read it is returned as null with the reason beside it, never as a guess, and a run that reads nothing is never charged for.

reapx · reapx.dev · reapxdev@proton.me