All posts

Instagram bio analysis: links, categories and niches at scale

November 8, 2026

A bio is the most compact piece of positioning on Instagram. Across a few thousand accounts, bios tell you which link-in-bio tools a niche uses, which shops creators send traffic to, how creators describe themselves, and how many accounts present as businesses. This guide shows how to analyze bios in aggregate.

One boundary first: this is market research, not lead harvesting. The goal is counts and patterns, not a list of people's emails or phone numbers. Leave contact details out of your dataset entirely.

What a profile gives you

FieldWhat it tells you
bioSelf-description, niche words, location words, calls to action
external_urlWhere the account sends traffic
categoryThe category label a professional account picked, such as Artist or Health/beauty
verified, followers, postsSize and maturity, for segmenting

Instagram has allowed up to five links on a profile since April 2023, with only the first shown directly in the bio TechCrunch. So the main external link is the one that matters most to visitors.

Step 1: build the account list

Start from a defined population, not a random crawl. Good seeds are: accounts posting under a niche hashtag this month, accounts in search results for a niche keyword, or the similar-accounts list of five known accounts in the niche. Dedupe by handle.

Step 2: pull profiles

import os, requests, csv
API = "https://scrapeio.com"
H = {"x-api-key": os.environ["SCRAPEIO_API_KEY"]}

rows = []
for handle in open("handles.txt").read().split():
    r = requests.get(f"{API}/v1/instagram/profile", params={"handle": handle}, headers=H).json()
    if r.get("success"):
        d = r["data"]
        rows.append({k: d.get(k) for k in ["handle", "followers", "category", "external_url", "bio"]})

Step 3: classify links by domain

Parse each external_url and keep only the domain. Then map domains to types:

  • Link hubs: link-in-bio pages that list many links.
  • Shops: store platforms and marketplaces.
  • Content: YouTube, podcasts, newsletters, blogs.
  • Booking and services: scheduling and booking sites.
  • Own domain: anything else.
from urllib.parse import urlparse
from collections import Counter

def domain(u):
    if not u:
        return None
    host = urlparse(u if "://" in u else "https://" + u).netloc.lower()
    return host[4:] if host.startswith("www.") else host

print(Counter(domain(r["external_url"]) for r in rows).most_common(20))

The top 20 domains usually cover most of a niche. Label those by hand and treat the rest as "own domain".

Step 4: count categories

A filled category usually means a professional (business or creator) account. The share of accounts with a category is a quick measure of how commercial a niche is. Then compare engagement by category: in many niches, creator-labeled accounts and business-labeled accounts perform very differently.

Step 5: mine the bio text

  • Niche words: count the most common words after removing stop words. These are the terms the niche uses about itself.
  • Calls to action: look for "shop", "book", "free guide", "code", "link below". Their share shows how hard a niche sells.
  • Partnership signals: words like "collab", "partner" or "PR" show openness to brand work, without you needing any contact detail.
  • Language: detect the bio language to split a niche by market.

A language model is handy for this step. Send bios in batches of 100 and ask for a niche label and a one-word positioning tag for each. Keep handles out of the prompt if you do not need them.

Step 6: report in aggregate

A useful output is a one-page table: share of professional accounts, top categories, top link domains by type, top niche words, and median followers per segment. That is enough to answer "how do creators in this niche monetize?" without exposing any individual.

Rules for doing this responsibly

  • Do not store emails, phone numbers or addresses, even if a bio contains them. Strip them with a regex before saving.
  • Store handles only as long as you need them for deduping.
  • Privacy law can apply to public profile data. This is not legal advice; check what applies to your project.

Doing it with ScrapeIO

The instagram profile API returns bio, external_url and category in one call. Build the account list with the instagram search profiles API or the instagram similar accounts API. A 2,000-account study costs about 2,000 credits, and private or missing accounts cost nothing. ScrapeIO's profile data does not include contact fields.

Sources

Checked on 8 November 2026 from each vendor's own pages. Prices and limits change; follow the links before you decide.

100 free credits, no card. Credits never expire.

Get API key