Person Social Footprint Mapper
Pricing
from $4.25 / 1,000 person mappeds
Person Social Footprint Mapper
Find a person's public GitHub, Bluesky, personal site, Substack, and X profiles from their name and company domain. One row per person with profile URLs, follower counts, and a match confidence per platform. No emails, no phones, never opens LinkedIn. X uses your own key.
Pricing
from $4.25 / 1,000 person mappeds
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Features
Share
What's new (October 2026)
- LinkedIn: turn on
include_linkedinand each person's LinkedIn profile is found on Google result pages, with the same matching Person LinkedIn URL Resolver uses, run inside this actor. The row addslinkedin_url(on a found match),linkedin_status, andlinkedin_confidence. A found LinkedIn counts as a platform found inside the existingperson-mappedevent, at today's price. No request goes to LinkedIn. Off by default.
No price change. Existing fields and saved inputs work as before.
Find a person's public GitHub, Bluesky, personal site, Substack, and X profiles from their name and the domain of the company they work at. You get one row per person with each profile URL, public follower counts, and a status and a match confidence for every platform.
The company domain is what makes the match trustworthy. A profile that links to the company, is listed on the company's own team page, or links to another profile of the same person counts far more than a matching name. A common name with no such link comes back ambiguous, never as a guess.
Rows are flat and snake_case, so they load straight into a spreadsheet, a CRM, or a Clay table.
✨ Features
- Person plus company in.
Mitchell Hashimotoandhashicorp.com, not a username you have to know already. - Five platforms. GitHub, Bluesky, the person's own website, Substack, and X (X on your own key).
- A confidence per platform.
foundneeds 0.8 or more. Between 0.5 and 0.8 you getambiguousand no handle, so a wrong profile never lands in your CRM. - The company's own pages first. Profile links printed next to the person's name on the company's team, leadership, or about page are the strongest evidence and are read first.
- Cross checks. A GitHub profile, a Bluesky profile, and a personal site that point to each other confirm each other.
- Common name guard. When GitHub lists 50 or more people with the name,
foundneeds a link to the company or to another profile. - Suppression list. Profile URLs you list in
suppress_profile_urlsnever appear in your output. - Batch input. Up to 200 persons per run.
📥 Input
| Field | Type | Description |
|---|---|---|
full_name | string | First and last name, for example Mitchell Hashimoto |
company_domain | string | The company the person works at, for example hashicorp.com |
persons | list | Several persons, one per line as Full Name | company.com, or a JSON list of objects |
linkedin_url | string | Optional hint. The words in the URL are compared with profile handles. LinkedIn is never opened |
location | string | Optional city or country, a small boost when a profile agrees |
platforms | list | Any of github, bluesky, personal_site, substack, x; empty means all |
github_token | secret | Optional, your own free GitHub token, for larger batches |
x_bearer_token | secret | Optional, your own X API bearer token. Without it X is skipped |
include_linkedin | boolean | Off by default. On: each person's LinkedIn profile is looked up on Google result pages, with Person LinkedIn URL Resolver's matching run inside this actor. A LinkedIn URL you pass is returned as given |
suppress_profile_urls | list | Profile URLs never to return |
max_charge_usd | string | Optional cost cap for the run |
proxy_mode | string | auto (default): a company or personal site page that refuses a direct request is retried once through the Apify proxy. direct: never use a proxy. A reliability setting; it does not change what you pay |
Example:
{ "full_name": "Mitchell Hashimoto", "company_domain": "hashicorp.com" }
📤 Output
One row per person. Every row carries every field; a field that does not apply is null.
| Field | Example | Notes |
|---|---|---|
full_name, company_domain, company_name | Mitchell Hashimoto, hashicorp.com, HashiCorp | |
github_url, github_login | https://github.com/mitchellh, mitchellh | |
github_followers, github_public_repos | 24807, 119 | Public counts |
bluesky_handle, bluesky_url, bluesky_followers | mitchellh.com | Exact follower count |
personal_site_url | https://mitchellh.com | Accepted only when its title or first heading names the person |
substack_url | Only when another public source links it | |
x_handle, x_url, x_followers | Only with your own X bearer token | |
linkedin_url, linkedin_status, linkedin_confidence | the profile URL, found, 0.9 | Only with include_linkedin on; the URL only on a found match; skipped when off |
<platform>_status | found | found, ambiguous, not_found, skipped, skipped_rate_limit, blocked |
<platform>_confidence | 0.99 | 0 to 1 |
candidates_count | 3 | Candidate profiles scored |
common_name | false | 50 or more GitHub users share the name |
matched_via | ["cross_link","platform_search"] | company_page, platform_search, cross_link, hint |
bio_source_url | The company page that linked the profiles | |
platforms_found | 3 | |
row_status | ok | ok, partial, no_match, blocked, error |
error_reason | null | Why a row is partial, blocked, or error |
billable_events_json | {"person-mapped":1} | What the row was billed as; {} is free |
source, checked_at |
No email address, phone number, or street address is ever returned. There is no field for one.
📏 Measured hit rates
Measured on 2026-10-20 on 30 named public people (founders, engineers, and go to market leaders), with no GitHub token and no X key:
| Measure | Result |
|---|---|
| Persons with at least one profile found | 11 of 30 |
| Found profiles that belong to the named person, checked by hand | 21 of 21 |
| Founders and engineers at developer companies mapped | 9 of 10 |
| Go to market and executive leaders mapped | 1 of 10 |
| Common name with no company link (Jane Smith at acme.com) | no_match, as designed |
Without a github_token, GitHub reads stop at 40 profile lookups per run and later persons return skipped_rate_limit for GitHub; in that run 18 of 30 did. Add your own free token for batches.
💵 Pricing
Pay per event. You pay only for a person where at least one platform returned found, plus a small start fee per run.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Person mapped (person-mapped), per person with at least one profile found | $0.00500 ($5.00 per 1,000) | $0.00475 ($4.75 per 1,000) | $0.00450 ($4.50 per 1,000) | $0.00425 ($4.25 per 1,000) |
Actor start (apify-actor-start), per run | $0.0002 | $0.0002 | $0.0002 | $0.0002 |
- With
include_linkedinon, a found LinkedIn profile counts as a platform found, so a person found only on LinkedIn is aperson-mappedrow at the price above. - A row with nothing found, an
ambiguousonly row, andblockedanderrorrows cost nothing. - A run stops at the maximum cost per run you set in Apify, and at
max_charge_usdif you set it. - Free Apify plan: 1.50 USD of evaluation a month, which is 300 mapped persons at the free plan price. Any paid Apify plan removes the cap.
- X lookups on your own bearer token are billed by X to your X account, not by this actor.
- The events above are all you pay this actor. Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
🚀 Usage examples
Console or API. POST https://api.apify.com/v2/acts/mambalabs~person-social-footprint-mapper/runs with the input above, then read the default dataset.
Batch.
{ "persons": ["Mitchell Hashimoto | hashicorp.com", "Simon Willison | datasette.io", "Dharmesh Shah | hubspot.com"] }
GitHub and Bluesky only.
{ "full_name": "Simon Willison", "company_domain": "datasette.io", "platforms": ["github", "bluesky"] }
Clay. Call the actor from a Clay column with the name column mapped to full_name and the domain column to company_domain. Clay sends every field as a string, which this actor expects. For more than a few hundred rows a day, add your own free github_token.
MCP. The @mambalabsdev/mcp-person-social-footprint-mapper server exposes the tool map_person_social_footprint to AI agents.
⚠️ Error handling
| Situation | What you get |
|---|---|
| No profile reaches the threshold | One free row, row_status no_match, with each platform's status |
| A likely profile that is not certain | That platform says ambiguous with its confidence and no handle |
| GitHub's published rate limit is reached | The actor waits up to 65 seconds for GitHub's reset, then marks GitHub skipped_rate_limit. Add a free github_token for larger batches |
| A platform refuses the request | That platform says blocked; the rest of the row continues |
| The company site refuses a direct request | In auto mode, one retry through the Apify proxy |
| Anything else | One free error row with the reason |
⚠️ Limitations and responsible use
- Hit rates are highest for engineers, founders, and people who write in public. Many people in sales, finance, and operations have no public GitHub or Bluesky profile, so expect more
no_matchrows for those roles. See the measured rates above. - Substack is never read. A Substack URL is returned only when the company page, the person's own site, or a found profile links to it.
- X is never scraped and never searched by name. With your own bearer token, the actor looks up only a handle that another public source already named, which follows X's developer rules on matching people to accounts.
- LinkedIn is never opened. A LinkedIn URL you pass is used for the words in it, and returned as given with
include_linkedinon. Withinclude_linkedinon, the profile is found on Google result pages; the profile page itself is never requested. - Instagram and TikTok are not looked up. Matching a person's name to a handle on those platforms is wrong too often without a second source to confirm it, and no such check is built yet.
- GitHub's Acceptable Use Policies do not allow its users' information to be used for spam, for unsolicited email, or for selling personal information, for example to recruiters, headhunters, and job boards. You are responsible for using GitHub data within those terms.
- You are the data controller under GDPR, CCPA, and applicable privacy laws for the rows you collect. The actor keeps no personal data after the run; results live in your own dataset. Use
suppress_profile_urlsto honor removal requests. - No cookies, no logins, and no stored keys. robots.txt is honored on every company and personal site page read.
🧩 Want other GTM data?
Mamba Labs builds a fleet of enrichment actors that share one flat output convention:
Every actor in the suite takes a domain, a company, or a person and returns flat rows, so they stack in the same table without reshaping anything.
🆘 Support
Found a bug? Open an issue on the Issues tab. Response time is typically within 48 hours.
ℹ️ Sourcing. Profiles come from the GitHub REST API, the public Bluesky API, the company's own web pages, and the person's own website. X data comes only from the X API on your own key. You are responsible for how you use the output.
Built by Mamba Labs.