sociallinks.dev

Blog / How-to

How to build an influencer database that stays clean (spreadsheet or CRM)

Most influencer lists start as a quick spreadsheet and turn into a mess within a quarter: the same creator appears three times under different handles, follower counts are a year old, and nobody remembers why a row says "maybe". This guide shows you how to set up an influencer database that stays usable as it grows, in Google Sheets, Airtable, a CRM or a real database: one record per person, each social account stored separately, every link normalized, and a note of when and how you learned each fact.

Start with what the database is for

Before you add a column, write one sentence about the decisions the database must support. "Find creators for our skincare campaigns and track who we paid" leads to a different design than "map every fitness creator in Germany for a market study". The purpose tells you which fields you need, how often to refresh them, and what not to collect.

Also decide who will use it and what you will filter by. More users means stricter edit rules, and anything you filter on (niche, country, platform, status) needs its own column with a fixed list of values, not free text.

One row per creator, not per account

The most useful design decision is to separate the person from their accounts. A creator such as "Maya Okafor" might run @mayabakes on Instagram, @mayabakes_ on TikTok and a YouTube channel called Maya in the Kitchen. If each is a row, you will email her three times and count her reach three times.

Use two tables (two tabs in a spreadsheet, or two objects in a CRM): creators, one row per person, and accounts, one row per social profile pointing back to a stable creator ID that never changes, even if every handle does.

Creators table

ColumnExampleNotes
creator_idCR-000142Stable, never reused. Do not use a handle as the ID.
display_nameMaya OkaforHow they present themselves publicly.
primary_nicheBakingPick from a fixed list.
countryGBISO 3166 two-letter code keeps filters consistent.
business_emailhello@example.comOnly if published for business enquiries.
statusContactedSee the pipeline section below.
ownerPriyaWho on your team is responsible for the relationship.
updated_at2026-10-23Set automatically if your tool allows.

Accounts table

ColumnExampleNotes
account_idAC-000387Stable ID for the account row.
creator_idCR-000142Links to the creators table.
platforminstagramFixed list: instagram, tiktok, youtube, x, and so on.
handlemayabakesNormalized: lowercase, no @.
platform_user_idUCxxxxxxxxxxxxxxxxxxxxxxWhen you can get it. Survives handle changes.
canonical_urlhttps://www.instagram.com/mayabakes/Built from the handle in one fixed format.
followers48200A number, not "48.2K".
followers_as_of2026-10-20The date you saw that number.
link_confidencehighHow sure you are this account belongs to this creator.
link_evidenceLinked from her YouTube About pageWhy you believe it.

If you import and export with CSV, keep the headers identical to the columns so nothing gets renamed along the way:

creators.csv and accounts.csv headers

creator_id,display_name,primary_niche,country,languages,business_email,status,owner,notes,created_at,updated_at
account_id,creator_id,platform,handle,platform_user_id,canonical_url,followers,followers_as_of,link_confidence,link_evidence,source

Normalize every profile URL and handle

Most duplicates are one profile written in different ways. https://instagram.com/MayaBakes?igsh=abc123, instagram.com/mayabakes/ and @mayabakes are one account, but a spreadsheet sees three values. Normalize on the way in, every time.

  1. Step 1Trim and lowercase

    Remove spaces before and after the value and convert it to lowercase. Instagram, TikTok and X handles are not case sensitive, so MayaBakes and mayabakes are the same account.

  2. Step 2Strip tracking and extras

    Cut everything after ? or # (share links often add parameters such as igsh, utm_source or is_from_webapp), and remove the trailing slash.

  3. Step 3Extract the handle

    Pull out just the handle and drop a leading @. Store it in the handle column. Reject links that point to a post, Reel or video (for example /p/, /reel/ or /video/) rather than a profile, or look up the author's profile first.

  4. Step 4Rebuild a canonical URL

    Generate the URL from the handle in one fixed format per platform. Never paste the original share link into the canonical column.

  5. Step 5Check for an existing match

    Search the accounts table for the same platform and handle (or platform user ID). If it exists, update that row instead.

PlatformMessy inputHandleCanonical form
Instagramhttps://Instagram.com/MayaBakes/?igsh=abc123mayabakeshttps://www.instagram.com/mayabakes/
TikTokhttps://www.tiktok.com/@MayaBakes_?lang=enmayabakes_https://www.tiktok.com/@mayabakes_
Xhttps://twitter.com/MayaBakesmayabakeshttps://x.com/mayabakes
YouTubehttps://youtube.com/@MayaInTheKitchen/videos@mayainthekitchenhttps://www.youtube.com/@mayainthekitchen

YouTube needs extra care: a channel can be reached by an @handle, a /channel/UC... URL with its permanent channel ID, or older /c/ and /user/ URLs. The channel ID survives handle changes, so store it in platform_user_id and treat it as the key for YouTube rows.

In Google Sheets you can do the Instagram and TikTok extraction with a formula. With the raw link in column A, these return a lowercase handle or a blank cell when the link does not match:

Google Sheets: handle from an Instagram or TikTok URL

=IFERROR(LOWER(REGEXEXTRACT(A2, "(?i)instagram\.com/([a-z0-9._]+)")), "")
=IFERROR(LOWER(REGEXEXTRACT(A2, "(?i)tiktok\.com/@([a-z0-9._]+)")), "")

Build the canonical URL in the next column, for example ="https://www.instagram.com/" & B2 & "/". The Instagram formula also matches post links and returns p, so filter for values such as p, reel, explore and stories and fix those rows by hand.

Deduplicate, merge and record evidence

Same person, different handles

Maya is @mayabakes on Instagram and @mayabakes_ on TikTok, so matching on handle alone will not connect them. Look for evidence that ties the accounts together: bio links, a link-in-bio page or website listing both, the same business email, or one account mentioning the other. When you confirm a match, attach both account rows to the same creator_id.

Same handle, different people

@jordanruns on Instagram and @jordanruns on X may be two unrelated people. Treat a handle match as a lead to check, never as proof.

When you do merge two creator records:

  1. Pick the older creator_id as the survivor, so existing references keep working.
  2. Move every account row, note and deal from the duplicate to the survivor.
  3. Keep the duplicate ID in a merged_into column (or a small merge log) instead of deleting it outright, so you can trace old exports.
  4. Resolve conflicts by keeping the most recent dated value.

Record evidence and confidence for every link

The link between a person and an account is a claim, and claims go wrong. A teammate a year from now needs to know why you believed the TikTok account was Maya's. Two columns on each account row cover it: link_confidence and link_evidence.

ConfidenceWhat counts as evidenceWhat to do
HighThe creator links the account from another verified or established profile, or from their own website.Use it for outreach and reporting.
MediumSame name, photo and niche, plus a matching link-in-bio page or cross-mentions, but no direct link.Use it, but check before signing a deal.
LowSimilar handle or name only.Keep it out of reports until you confirm it.

Write evidence another person can check, such as "Linked from YouTube About page, checked 2026-10-20", not "looks like her". If a tool found the match, store its score and reason, and still review low-confidence matches yourself.

Fields to track, refresh dates and status

Follower counts, engagement and even handles change, so every metric column gets a matching _as_of date. Set a refresh rule for each kind of field:

FieldChangesSuggested refresh
Followers / subscribersConstantlyBefore any outreach or report, and on a fixed cycle such as monthly for active prospects.
Engagement rate or average viewsWith every postWhen you shortlist the creator for a campaign. Record how you calculated it.
Handle and canonical URLOccasionallyWhen a link stops working, and on each metrics refresh. Platform user IDs help here.
Niche, country, language, emailRarelyOnce or twice a year, and the email before each outreach round.
Status and deal historyWith every interactionUpdate at the time it happens.

For fields you report on, append to a small metrics_history table (account ID, date, followers, views) instead of overwriting, so you can show growth.

Use a simple status pipeline

Use a dropdown with a short list and add a status_changed_at date so you can see stale records. One pipeline that works for most teams:

StatusMeaning
ProspectFits the brief, not yet vetted.
VettedContent, audience and brand safety checked.
ContactedFirst message sent.
In conversationDiscussing terms.
ContractedAgreement signed.
LiveContent published.
CompletedDelivered and paid.
Not a fit / DeclinedClosed, with the reason.
Do not contactThey asked not to be contacted. Keep only what you need to honor that.

Privacy basics for creator data

Creators are people, and an influencer database is a store of personal data even when every field came from a public profile. This is general information, not legal advice; check with your own counsel for your situation. A few principles apply under most privacy laws, including the EU and UK GDPR and California's CCPA:

Spreadsheet, CRM or database: when to move

OptionGood forSigns you have outgrown it
SpreadsheetA small team and a few thousand creators.Linking tabs by ID gets painful, or people overwrite each other.
No-code database (Airtable and similar)Linked tables, dropdowns and views without code.You hit record or automation limits.
CRMOutreach, email logging, tasks and deal stages for a team.You need custom analysis, or the CRM fights the person/account split.
SQL database (Postgres and similar)Large datasets, research, apps and API access.Rarely outgrown, but needs someone to maintain it.

Whatever you choose, keep the same two tables and IDs. Then moving to a CRM or database later is an import, not a rebuild.

Filling in the accounts table faster

Finding each creator's other accounts is usually the slowest part of building the accounts table. sociallinks.dev takes one Instagram, TikTok, YouTube or X profile URL and returns the creator's accounts on other platforms with a confidence score and the evidence for each match, which maps directly onto the link_confidence and link_evidence columns above. Its bulk mode takes up to 500 profile links and returns a spreadsheet.

FAQ

What columns should an influencer database have?

At minimum, a creators table with a stable creator ID, name, niche, country, contact route, status and owner, plus an accounts table with platform, normalized handle, canonical URL, follower count and the date you recorded it. Add confidence and evidence columns for each account link.

How do I avoid duplicate influencers in a spreadsheet?

Normalize every profile link before adding it: lowercase it, strip query strings and trailing slashes, extract the handle and rebuild one canonical URL. Then check the accounts table for the same platform and handle before inserting a row. For the same person on different handles, link the accounts to one creator ID based on evidence such as bio links.

Should I use a spreadsheet or a CRM for influencer management?

A spreadsheet is fine for a small team and a few thousand creators, as long as you use IDs and separate tabs for creators and accounts. Move to a CRM when a team needs shared email logging and deal stages, and to a database for large-scale analysis or API access.

How often should I update follower counts?

Refresh them before any outreach or report, and on a regular cycle such as monthly for creators you are actively considering. Always store the date next to the number. A follower count without an "as of" date cannot be trusted in a report.

Is it legal to store data about influencers?

Generally you can store public, professional information about creators, but privacy laws such as the GDPR and CCPA still apply to it as personal data. You typically need a lawful basis, should collect only what you need, inform people where required and honor deletion requests. This is not legal advice, so check the rules that apply to your business.

How do I handle a creator who changes their handle?

Keep the creator ID and account ID the same and update the handle and canonical URL on the existing account row. If you stored the platform's user ID, such as a YouTube channel ID, use it to confirm it is the same account. Note the old handle in a history field so older exports still make sense.

Find a creator’s accounts