# GitHub / Twitter Handle to LinkedIn Profile — $3.20/1k (`sputnikapi/social-handle-lookup`) Actor

Resolve a GitHub, Twitter/X or Facebook handle to the person’s LinkedIn profile: name, current role, employer, career history and their other social links. Built for developer recruiting and creator outreach. $3.20 per 1,000 matched, the full 164-field document $8. Pay only when found.

- **URL**: https://apify.com/sputnikapi/social-handle-lookup.md
- **Developed by:** [Sputnik API](https://apify.com/sputnikapi) (community)
- **Categories:** Lead generation, AI, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 1,000 handle matched (summary)s

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## GitHub / Twitter Handle to LinkedIn Profile

> **$3.20 per 1,000 matched handles, $8 with the full 164-field document.**
> Nothing on this shelf resolves a GitHub or Twitter handle to a professional
> profile at all — this is the same price ladder as our profile lookups, not
> a novelty premium.

Match GitHub, Twitter/X, or Facebook handles to full LinkedIn profiles:
name, current job title and employer, headline, bio, skills, education,
location, and the person's other social links.

Paste bare handles (`getify`) or full profile links
(`https://github.com/getify`) — both work. A link from the *wrong* network
is refused as a free `invalid` row rather than silently misread.

This is a **database lookup, not a live scrape**, over one billion
professional profiles, with a freshness stamp on every row.

### Who is this for

- **Dev-tool GTM**: turn GitHub stargazers and OSS contributors into
  titled, located, reachable people.
- **Creator & community outreach**: resolve Twitter/X or Facebook handles
  to the professional behind them.
- **Recruiting**: a GitHub handle becomes a career history.

### Input

```json
{
  "network": "github",
  "handles": ["getify", "https://github.com/torvalds"],
  "fullOutput": false
}
```

All handles in one run belong to the network selected in `network`.

### What you get — 60+ fields per match, 164 with `fullOutput`

| Group | Summary card (default, $0.0032/found) | Full document (`fullOutput: true`, $0.008/found) |
|---|---|---|
| Identity | full name, first/last, headline, photo, profile slug | same + background image |
| Current role | job title, employer name + slug (flat columns), position dates, industry | + role descriptions, employment type, job function |
| Career history | current positions | **every past position** with dates and descriptions |
| Education & certifications | schools, degrees, fields of study, dates; cert names, authorities | + descriptions, grades, license numbers |
| Skills, languages, bio | full skills list, languages, "about" text | same |
| Location & seniority | city/state/country, experience years, tenure, decision-maker flag | same |
| Salary estimate | inferred min–max | same |
| Social links | professional profile URL, GitHub, Twitter/X, Facebook, website | same |
| Contacts | — | **email addresses and phone numbers when on record** |
| Deep sections | — | publications, patents, awards, projects, articles, related profiles |
| Honesty meta | `_status`, `_freshness`, `updatedAt`, `_matchCandidates` | same + per-section coverage map |

### Output

One row per handle: `_status` and `_input` on every row; found rows add the
profile card, `_freshness`, `_fullData` — a link to the complete document
via the direct API — and flat `companyName` / `companySlug` columns when a
current position is on record.

```json
{
  "_status": "found",
  "_input": { "github": "torvalds" },
  "_freshness": "fresh_90d",
  "companyName": "Linux Foundation",
  "_view": "lite-v3",
  "fullName": "Linus Torvalds",
  "jobTitle": "Fellow",
  "location": { "city": "Portland", "state": "OR", "country": "US" },
  "experience": { "work": [ { "title": "Fellow", "company": "Linux Foundation", "endDate": null } ] },
  "contactInformation": { "socialLinks": { "githubUrl": "https://github.com/torvalds", "profileUrl": "…" } }
}
```

*(illustrative excerpt of the row shape — the card also carries `about`,
`skills`, `education`, `seniority`, connection counts and more; run the
prefill to see a live row)*

`fullOutput: true` upgrades every match to the complete document —
**164 fields across 37 sections**, including full career history with
descriptions and the contact block.

The **Output tab** shows three views: *Overview*, *Career & education*,
and *Contacts & signals*.

### Pricing — you only pay for found matches

| Event | Price | When |
|---|---|---|
| Handle matched (summary) | $0.0032 | matched handle, 60+ field row |
| Handle matched (full document) | $0.008 | `fullOutput: true`, 164 fields / 37 sections |
| Not found / invalid | **$0** | always free |

### FAQ

**What exactly does `fullOutput` add?** The complete career history with
role descriptions, education and certification detail, publications,
awards, projects, articles, related profiles — and the contact block
(emails, phone numbers when on record). The summary card never carries
contact data.

**Which networks?** GitHub, Twitter/X, and Facebook — one network per run.

### The family

Same engine, other doors: **Reverse Email Lookup** (email → person),
**Profile Lookup** (URL → profile), **Work Email Finder** (name + domain →
email), **Company Employees Finder** (domain → roster), **People/Company
Database Search**, **Name-to-Profile** (name + company → profile),
**Bulk People Enrichment** (CSV, 50k rows). One data core, one billing
promise: misses are free.

### Disclaimer

This Actor is an independent product and is not affiliated with, endorsed
by, or sponsored by LinkedIn Corporation. It does not access, crawl, or
scrape LinkedIn at run time — answers come from our own database of
publicly available professional data; "LinkedIn" is used only to describe
the kind of public profile data the database covers. Removal requests are
honored via the Issues tab.

# Actor input Schema

## `network` (type: `string`):

Which network the handles belong to. All handles in one run must be from the same network.

## `handles` (type: `array`):

One handle (or full profile link on the selected network) per line. Unmatched handles come back as free "not\_found" rows.

## `fullOutput` (type: `boolean`):

Return the complete profile document — 164 fields in 37 sections: full career history with role descriptions, education detail, certifications, publications, patents, awards, projects and all contact fields — instead of the 60+ field summary card. Misses stay free in both modes.

## Actor input object example

```json
{
  "network": "github",
  "handles": [
    "getify"
  ],
  "fullOutput": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "handles": [
        "getify"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sputnikapi/social-handle-lookup").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "handles": ["getify"] }

# Run the Actor and wait for it to finish
run = client.actor("sputnikapi/social-handle-lookup").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "handles": [
    "getify"
  ]
}' |
apify call sputnikapi/social-handle-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sputnikapi/social-handle-lookup"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yAurAk3RNFYKWlIRP/builds/HuegfSdr6ynE3yJD3/openapi.json
