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
a day ago
Last modified
Categories
Share
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 |
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 | |
<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 |
- 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 only for the words in it.
- 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 custom actors for B2B go-to-market teams. The public versions of that work live here on the Store.
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.
🛠️ Need something custom built? Talk to Mamba Labs.
🆘 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.