Detecting fake Instagram engagement with API data
Every influencer deal, marketplace onboarding and UGC campaign eventually asks: is this engagement real? No single metric proves it — but a short battery of API checks catches most purchased engagement, because fakes are cheap and APIs see the seams. This is the checklist, endpoint by endpoint.
Signal 1: liker composition
The likes endpoint returns a ~100-liker sample. Fake likers cluster into recognizable shapes:
- high share of faceless accounts: default avatar, no posts, private
- follower counts bunched at round numbers (100, 500, 1000)
- usernames with digit-suffix patterns
from getsocialapi import Client
ig = Client(api_key="gsa_live_...").instagram
likers = ig.media_likers(shortcode)["users"]
faceless = sum(1 for u in likers
if u.get("is_private") and not u.get("profile_pic_url"))
print("faceless share:", faceless / len(likers))
A healthy public post's likers are mostly public, avatar-bearing accounts. A >40% faceless share on a "lifestyle" account is a conversation, not a coincidence.
Signal 2: engagement ratio sanity
Cross the media card counters with the profile:
- like-to-follower ratio far above the account's historical baseline on isolated posts (bought bursts concentrate on few posts)
- comment-to-like ratio below ~0.5% with high likes (comments cost more than likes — purchased packages reflect that)
Compute the baseline from the account's own grid via user media — you need ~12 posts for a stable median.
Signal 3: comment content patterns
Full comment export is one walker (see the comments pagination guide). Fraud tells:
- emoji-only / generic praise ("🔥🔥", "Great post!") share
- duplicated texts across different commenter accounts
- commenters whose own accounts are empty
- declared
comment_countfar above collectable + child comments — the gap is where filtered spam lived
Signal 4: the About screen
The about-this-account endpoint adds the trust trio:
- recent
joined_aton an account claiming brand history - multiple
former_usernames— repurposed handle accounts_with_shared_followersclustering — bot farms share audiences by construction
Scoring it
score = 0
score += faceless_share > 0.4 # liker quality
score += er_outlier > 3 # burst detection
score += generic_comment_share > 0.6 # comment quality
score += joined_recently # account age
# 0-1: normal variance; 2: review; 3-4: high fraud probability
The whole battery is ~20 API calls per account — profile, about, media page, one likes sample, one comments page. At influencer-vetting volume it costs less than one disputed invoice.
Every signal here is observable through public endpoints, no cookies, no account access — getsocialapi.com, first 100 calls free.
Build with GetSocialAPI
Explore Instagram API for capabilities, pricing and integration examples. Create an account to start with 100 free calls, or follow the quickstart.