Short answer
To deduplicate followers across several Instagram accounts, keep the source membership table, use a stable user ID when available, build one master row per unique profile, and retain each profile's source-account list and count.
Do not simply append follower CSVs and delete duplicate usernames. That removes the evidence needed to measure audience overlap and can merge or split profiles incorrectly when usernames change.
Why cross-account deduplication matters
Suppose four approved Instagram accounts display a combined 300,000 followers.
That does not mean the category contains 300,000 distinct profiles. The same person, business, creator, or inactive account may appear in several source audiences.
A multi-account delivery should answer:
- How many follower rows were collected from each source?
- How many unique profiles remain after deduplication?
- How many profiles appear under two, three, or more accounts?
- Which source contributes the most unique profiles?
- Which public profile fields are available for the distinct audience?
People ask this question directly. One Reddit user wanted to calculate the total distinct followers of four accounts; another recent product discussion proposed showing mutual followers for creator and marketer collaboration research. Reddit: distinct followers across accounts (opens in a new tab), Reddit: mutual follower research (opens in a new tab)
Use three tables, not one destructive merge
1. Source-account table
One row per approved source account.
source_account_id
source_username
source_profile_url
displayed_follower_count
requested_limit
collected_count
collection_date
status_note2. Audience-membership table
One row per source-account-to-profile relationship.
source_account_id
instagram_user_id
username
display_name
profile_url
is_private
is_verified
collected_atIf one profile follows three source accounts, this table should contain three rows. That is not an unwanted duplicate; it is the relationship the project is measuring.
3. Master-profile table
One row per resolved Instagram identity.
master_profile_id
instagram_user_id
username_current
display_name
source_accounts
source_count
appears_in_multiple_sources
biography
followers_count
public_email
website
profile_collected_at
qa_statusThe master table reduces repeated public profile fields without destroying the many-to-many relationship stored in the membership table.
Choose the correct identity key
Instagram user ID
When available under the approved method, a stable platform user ID is normally the strongest key. It can survive a username change.
Username
Username is useful but mutable. It should be normalized conservatively:
- remove a leading
@for comparison; - use case-insensitive matching;
- preserve the raw username;
- retain the profile URL;
- record collection dates;
- do not assume a later user of the same username is the same identity without additional evidence.
Display name
Display name is not a safe deduplication key. Many unrelated accounts share the same person name, shop name, or generic label.
Email, website, or phone
These fields can support review, but they should not replace the Instagram identity key. Several profiles may belong to one business, and one profile may publish several links.
Preserve source membership as an array or bridge table
For spreadsheet delivery, a source list and source count are practical:
| username | source accounts | source count |
|---|---|---|
maker_one | brand_a, brand_b, brand_c | 3 |
studio_two | brand_b | 1 |
For a database, use a bridge table:
profiles
master_profile_id
instagram_user_id
username
source_accounts
source_account_id
source_username
audience_memberships
source_account_id
master_profile_id
relationship_type
collected_atThis structure makes overlap queries straightforward and prevents comma-separated account names from becoming a long-term technical constraint.
Calculate overlap carefully
Useful metrics include:
Unique audience size
count(distinct master_profile_id)Pairwise overlap
For accounts A and B:
followers_in_both_A_and_BJaccard similarity
If a research team wants a normalized comparison:
intersection(A, B) / union(A, B)Multi-source frequency
Count profiles by source_count:
| source count | interpretation |
|---|---|
| 1 | Appeared under one approved source |
| 2 | Appeared under two sources |
| 3+ | High cross-source presence in the collected dataset |
Do not turn cross-source frequency into “purchase intent” or “influence” without a validated client methodology. It proves repeated membership in the collected source set, not a motive.
Account for source-size and coverage differences
Pairwise overlap is affected by:
- source account size;
- requested limits;
- accessible list coverage;
- collection timing;
- private or unavailable profiles;
- platform ordering and repeated results.
If one source was collected to 5,000 rows and another to 100,000 rows, raw overlap counts are not directly comparable without the coverage context.
The source manifest should therefore travel with every overlap report.
Deduplicate before or after profile enrichment?
The usual sequence is:
- Collect source membership.
- Normalize IDs and usernames.
- Resolve unique identities.
- Enrich each unique public profile once.
- Join the profile fields back to the membership table or master output.
This avoids opening the same public profile repeatedly when it appears under several sources.
There are exceptions. If user IDs are unavailable and usernames conflict, a small amount of profile evidence may be needed for identity review. Such exceptions should be logged rather than silently merged.
Handle usernames that change
A repeated snapshot may contain:
- the same user ID with a new username;
- a username that no longer resolves;
- a username apparently assigned to another profile;
- a profile that became private;
- an account that was deleted or suspended.
Recommended fields:
instagram_user_id
username_raw
username_current
first_observed_at
last_observed_at
status_current
identity_review_noteDo not overwrite the earlier observation. History is useful precisely because the visible profile can change.
Cross-account duplicates versus duplicate extraction rows
These are different:
Valid cross-account membership
The same profile legitimately appears under several source accounts. Preserve each relationship.
Duplicate extraction row
The same source account returns the same profile more than once because of pagination, retry, or source behavior. Remove the repeated source relationship after verifying the identity key.
Potential identity conflict
Two rows share a username but have different user IDs, or share a user ID but conflict on current username. Flag them for review.
QA checks for a multi-account project
- Every membership row has a valid source-account key.
- Every accepted master profile has at least one membership.
- Source-level unique counts reconcile with the membership table.
- Master unique count reconciles with distinct resolved identities.
- Source-account arrays match the bridge table.
source_countequals the number of unique source memberships.- No two master profiles share the same stable user ID.
- Username-only matches with conflicts are reviewed.
- Enrichment is performed once per resolved profile where possible.
- Missing and unavailable profiles are reported.
Example permanent-jewelry scope
A permanent-jewelry audience project may include 19 approved public source accounts and an estimated 222,000 unique profiles.
The estimate should remain an estimate until collection and deduplication are complete. The final delivery should report:
- raw memberships collected;
- source-level unique rows;
- cross-source duplicates;
- final unique master profiles;
- public profile enrichment count;
- email, website, booking-link, city, and state coverage;
- unavailable and private-profile counts.
See the 19-account permanent-jewelry audience case study for the project structure.
Frequently asked questions
Can Excel remove duplicate Instagram followers?
Excel can remove exact duplicate values, but a professional workflow should preserve source membership and use a documented identity key. A simple “Remove Duplicates” action can discard valuable relationships.
Is username enough for deduplication?
It is a practical fallback, but not ideal because usernames change. Use a stable platform ID when legitimately available and retain username history where relevant.
Should private profiles be deleted?
Not automatically. A private flag can still be a valid field in the audience-identity table. Private content and hidden profile details should not be collected.
Does high overlap mean high purchase intent?
No. It means the profile appeared in several collected source audiences. Interpretation belongs to the research or campaign team and should use other evidence.
Can the overlap be refreshed later?
Yes, by collecting a new approved snapshot. Compare observations rather than assuming every difference represents a real follow or unfollow event.
Next step
If you need a source-membership model before the merge, start with Instagram Public Profile Data Schema, then use How to Build a Multi-Account Instagram Data Pipeline for execution. For a managed multi-account follower consolidation and public-profile enrichment project, review the Instagram Audience Data Collection offer.
Sources
- Reddit: Is there a way to calculate total distinct followers across four Instagram accounts? (opens in a new tab)
- Reddit: Mutual followers between two Instagram accounts (opens in a new tab)
- Influencity: Follower overlapping (opens in a new tab)
- W3C PROV Data Model (opens in a new tab)
- Instagram Terms of Use (opens in a new tab)

