# Creator Profile Lookup: TikTok, Instagram, YouTube, X, Threads (`accountable_eel/creator-profile-unified-lookup`) Actor

Influencer lookup across platforms. One handle, name or profile URL in, one row out with social profiles by handle for TikTok, Instagram, YouTube, X and Threads: influencer follower count all platforms, bio, verified, links, business email. To Google Sheets or Clay. Only a creator found is billed.

- **URL**: https://apify.com/accountable\_eel/creator-profile-unified-lookup.md
- **Developed by:** [Adrian Voss](https://apify.com/accountable_eel) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $11.40 / 1,000 creator resolveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Creator Profile Lookup: TikTok, Instagram, YouTube, X, Threads

Find a creator on every platform. Give it one handle, one name, or one profile URL, and get back a
single row with that creator's TikTok, Instagram, YouTube, X and Threads profiles side by side:
influencer follower count all platforms, following, posts, verified badge, bio, every link they
publish, and a published business email when they have put one in a bio.

### Who it's for

You have a list of creators and only one identifier each, usually the handle from wherever you found
them. You need the rest: where else are they, how big are they there, how do you contact them.

- **Influencer marketing.** Score a shortlist by total reach instead of by one platform's number,
  and find out where the audience actually is before you pitch.
- **Creator sourcing and outreach.** Turn a handle into a contactable creator: published email,
  website, and every link in the bio.
- **Agency and brand reporting.** One row per creator, refreshed on a schedule, into Google Sheets
  or Clay.
- **Anyone joining social profiles by handle.** One request per platform, one row out, no browser.

### What you get

One row per creator, always. Per platform: profile URL, the handle that platform itself reports,
followers, following, posts, verified, bio, and a status that says exactly what happened. Then the
cross-platform answer:

| Column | What it is |
| --- | --- |
| `displayName` | The creator's name, from the profile you named by URL, else their biggest profile |
| `totalFollowers` | Sum of the follower counts of every platform found |
| `platformsFound` | How many platforms returned a public profile. `0` is never charged |
| `largestPlatform` | Where the audience actually is |
| `bioLinks` | Every external link the profiles publish, as `{platform, title, url}` |
| `websiteUrl` | The one site the profiles most agree on |
| `businessEmail` | An address the creator **published** in a bio or a `mailto:` link. Never guessed |
| `businessEmailSource` | Which platform's bio it came from, so you can check it |
| `matchConfidence` | `high` / `medium` / `low`. Read this before treating the row as one identity |
| `matchEvidence` | The actual evidence, in plain English |

### The five platforms

Each platform is one HTTP request, reading the profile payload the page itself server-renders. No
browser, no login, no API key, no cookies. Every fetcher is a copy of this portfolio's own
single-platform actor for that target, trimmed to the profile fields.

| Platform | Route | Followers | Following | Posts | Verified |
| --- | --- | --- | --- | --- | --- |
| TikTok | `tiktok.com/@handle` | exact | exact | videos | yes |
| Instagram | `instagram.com/handle/`, residential proxy | exact | exact | as displayed | yes |
| YouTube | `youtube.com/<channel>/about` | subscribers, as displayed | not published | videos | best effort |
| X (Twitter) | `x.com/handle` | exact | exact | posts | yes |
| Threads | `threads.com/@handle` | exact | not published | not published | yes |

Where a cell says "not published", the platform does not publish that number on a logged-out
profile, so the column is `null` and never `0`. Where it says "as displayed", the platform itself
rounds the figure (YouTube shows "516M subscribers", Instagram shows "1.2M posts"), and so does this
actor, because there is no exact number to read. `totalFollowers` inherits YouTube's rounding
whenever YouTube is one of the platforms found.

### How the match is decided

The same handle on two platforms is usually the same person, and sometimes it is not. This actor
never hides that.

- **Same handle** (default) tries the handle on every platform you selected and accepts whatever
  public profile is there. Broad, fast, and honest about its own risk through `matchConfidence`.
- **Linked** only accepts a platform profile when its bio, its links or its website
  cross-reference another profile found for the same creator, or when you supplied that profile
  yourself as a URL. An account it cannot confirm is reported as `NOT_LINKED`, not dropped
  silently, and is never charged.

`matchConfidence` means:

- **high** the profiles link to each other, or they publish the same website. Also `high` when you
  supplied a single profile by URL, because then nothing had to be inferred at all.
- **medium** the same handle on two or more platforms **and** display names that agree.
- **low** the same handle only, with nothing else agreeing.

A **name** input ("Marques Brownlee") is collapsed to a guessed handle ("marquesbrownlee"). That is
lower precision by nature, and `matchEvidence` always says when it happened. A handle or a profile
URL resolves far more reliably.

### What a run costs, and how to control it

A creator costs **one HTTP request per selected platform**, plus one retry on any request that fails
to answer at all. There is no paging, no search step and no follow-up hop anywhere in this actor.

- **"Which platforms to check" is the cost control.** Drop a platform and that request is never
  made. Instagram is the expensive one, because it is the only platform that requires a residential
  proxy: it answers a datacenter IP with its login shell, which carries no profile data. Untick it
  and the run gets markedly cheaper.
- **"Which columns" is display only.** Hiding a column never changes what a run costs, and this
  actor says so rather than implying a saving that is not there.
- **You are billed once per creator**, however many platforms you check, and only when at least one
  of them returned a public profile.
- **The retry only fires on a failure**, never on a refusal. A platform that answers with a 403 is
  answering, and paying twice to be refused twice would buy nothing. In the build's live run 2 of 15
  platform requests timed out, one of them the very platform the buyer had named by URL, which is
  what the retry is there for.

### How to use

1. **In the Apify Console.** Open the actor page and click **Start** — the `creators` field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
2. **Via the API.** Call it directly with a POST request — no Console needed once you have an API token:
   ```bash
   curl "https://api.apify.com/v2/acts/accountable_eel~creator-profile-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
     -X POST \
     -H "Content-Type: application/json" \
     -d '{"creators":["mkbhd","mrbeast","nasa"]}'
   ```
3. **On a schedule.** Save this actor as an Apify **Task** with the input you want, then add a **Schedule** (hourly, daily, weekly) so it runs on its own — no server of your own required.

### Input

```json
{
  "creators": [
    "mkbhd",
    "mrbeast",
    "nasa"
  ]
}
```

One creator per line. A handle ("mkbhd"), a name ("Marques Brownlee"), or a profile URL on any of the five platforms — each line comes back as ONE row with that creator’s TikTok, Instagram, YouTube, X and Threads profile side by side: followers, following, posts, verified, bio and every link they publish. A profile URL or an exact handle resolves far more reliably than a name, which has to be collapsed to a guessed handle; matchConfidence and matchEvidence always tell you which happened, and which platforms actually agree. Accepted formats: mkbhd, https://www.tiktok.com/@mkbhd, Marques Brownlee, https://www.youtube.com/@mkbhd, https://x.com/mkbhd.

### Output

One row per creator, for example:

| query | found | status | input | tiktokUrl | tiktokHandle | tiktokFollowers | tiktokFollowing | tiktokPosts | tiktokVerified | tiktokBio | tiktokStatus | instagramUrl | instagramHandle | instagramFollowers | instagramFollowing | instagramPosts | instagramVerified | instagramBio | instagramStatus | youtubeUrl | youtubeHandle | youtubeFollowers | youtubeFollowing | youtubePosts | youtubeVerified | youtubeBio | youtubeStatus | xUrl | xHandle | xFollowers | xFollowing | xPosts | xVerified | xBio | xStatus | threadsUrl | threadsHandle | threadsFollowers | threadsFollowing | threadsPosts | threadsVerified | threadsBio | threadsStatus | displayName | totalFollowers | platformsFound | largestPlatform | bioLinks | websiteUrl | businessEmail | businessEmailSource | matchConfidence | matchEvidence | scrapedAt |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| mkbhd | true | OK | <creator submitted> | \<tiktok: profile url> | \<tiktok: handle> | \<tiktok: followers> | \<tiktok: following> | \<tiktok: posts> | \<tiktok: verified> | \<tiktok: bio> | \<tiktok: status> | \<instagram: profile url> | \<instagram: handle> | \<instagram: followers> | \<instagram: following> | \<instagram: posts> | \<instagram: verified> | \<instagram: bio> | \<instagram: status> | \<youtube: profile url> | \<youtube: handle> | \<youtube: followers> | \<youtube: following> | \<youtube: posts> | \<youtube: verified> | \<youtube: bio> | \<youtube: status> | \<x: profile url> | \<x: handle> | \<x: followers> | \<x: following> | \<x: posts> | \<x: verified> | \<x: bio> | \<x: status> | \<threads: profile url> | \<threads: handle> | \<threads: followers> | \<threads: following> | \<threads: posts> | \<threads: verified> | \<threads: bio> | \<threads: status> | <creator name> | \<followers, all platforms> | <platforms found> | <biggest platform> | <all published links> | <main website> | <published business email> | <email came from> | <match confidence> | <why we think so> | 1970-01-01T00:00:00.000Z |

A creator found nowhere comes back as a row with `"found": false` and is never charged. Two dataset
views are available in the Console: **Overview** (every column) and **Platforms** (the per-platform
grid plus the identity summary, without the bios).

### Example runs

Three inputs that need no credentials of any kind and return rows as they stand. Paste one into the
Input tab and press Start.

**1. Three creators, all five platforms**

```json
{
  "creators": ["mkbhd", "mrbeast", "nasa"]
}
```

**2. Start from a profile URL you already have, and find the rest**

```json
{
  "creators": [
    "https://www.tiktok.com/@mkbhd",
    "https://www.youtube.com/@MrBeast",
    "https://x.com/nasa"
  ]
}
```

**3. Only confirmed matches, and skip the expensive platform**

```json
{
  "creators": ["mkbhd", "mrbeast"],
  "platforms": ["tiktok", "youtube", "x", "threads"],
  "matchMode": "linked"
}
```

### Pricing

### Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

```bash
curl "https://api.apify.com/v2/acts/accountable_eel~creator-profile-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"creators":["mkbhd","mrbeast","nasa"]}'
```

**n8n.** Add an HTTP Request node: Method `POST`, URL `https://api.apify.com/v2/acts/accountable_eel~creator-profile-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>`, Body Content Type `JSON`, JSON Body `{"creators":["mkbhd","mrbeast","nasa"]}` (swap in an expression from an earlier node for a real value).

**Clay.** Add an "HTTP API" column: Method `POST`, URL `https://api.apify.com/v2/acts/accountable_eel~creator-profile-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>`, Body `{"creators":["{{creator}}"]}`, mapping the row's creator into the `creators` array.

**MCP.** In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Influencer lookup: social profiles by handle, 5 platforms" — the agent will find and run this actor.

### vs. the alternatives

- **A single-platform profile scraper** answers one platform. You would run five of them and join
  the results yourself, and you would still have no follower total, no biggest-platform answer and
  no view on whether the five handles are even the same person.
- **A follower-count tracker** bills per profile, so five platforms is five charges. This bills once
  per creator.
- **An email-finder for creators** guesses addresses from a name and a domain. This one does not
  guess at all: `businessEmail` is only ever an address the creator published themselves, and
  `businessEmailSource` names the field it came from.
- **A creator search or lookalike tool** discovers creators you do not know yet. This one resolves
  creators you already have. They are different jobs, and this actor does not pretend to do the
  first one.

### Limits, stated plainly

- **Public profile fields only.** No follower or following lists, no posts, no comments, no DMs,
  nothing behind a sign-in wall.
- **Private accounts return `PRIVATE` and no data.** Not even the follower count some platforms
  still publish for them, and a `PRIVATE` platform never contributes to a charge.
- **YouTube's subscriber count and Instagram's post count are rounded by the platform**, not by
  this actor. There is no exact figure to read logged out.
- **Threads publishes no following count and no post count**, and YouTube publishes no following
  count. Those columns are `null`.
- **Verified is `null` rather than `false` when the platform did not say.** X publishes a badge
  record on some profile pages and not others (x.com/MKBHD carries one, x.com/KhabyLame does not),
  and the only signal left when it is missing is X's legacy verified flag, which is false for every
  account today whether or not it has a blue check. YouTube's badge is read off the channel's own
  header title, and is `null` when that structure is absent. In both cases `null` means "the platform
  did not say", never "not verified".
- **A request can simply fail.** A platform whose request and retry both time out comes back
  `REQUEST_FAILED`, which is deliberately not `NOT_FOUND`: nothing is claimed about that account
  either way. The other platforms still answer and the row is still delivered.
- **A name input is a guess.** The handle is derived by collapsing the name to its letters and
  digits, and one request per platform is made with it. `matchEvidence` says so on every such row.
- **Handles are adapted per platform where they have to be.** X allows no dots, so `mk.bhd` is
  tried as `mkbhd` there, and `matchEvidence` says so. A different handle can be a different person.
- **No discovery.** This actor resolves a creator you name. It does not search for creators by
  topic, hashtag or lookalike.
- **A platform can refuse a request.** That platform comes back `BLOCKED` with the reason, the other
  four still answer, and the row is still delivered.

### Data protection

This actor reads public creator profiles, which are personal data about identifiable people. It
reads nothing behind a sign-in wall and holds nothing between runs: every row is fetched live and
written to your own dataset, which only you control.

- **You are the controller.** Whether you may collect, store and use this data is a question about
  you and your purpose, not about this tool. If you are in the EU or the UK, or your subjects are,
  the GDPR applies to what you do next: you need a lawful basis, and duties around transparency,
  retention, and honouring a request to be erased. Each platform's own terms also restrict automated
  collection. Nothing here is legal advice, and running this actor is not a determination that your
  use is lawful.
- **Business outreach only.** `businessEmail` is an address a creator published so that businesses
  would contact them, and that is the only use this actor is built for. It is never an address this
  actor guessed, and sending unsolicited email brings its own rules on top of the GDPR (the
  ePrivacy rules in the EU and the UK, CAN-SPAM in the US).
- **Honour opt-outs.** If a creator asks you to stop, stop: delete their rows, and do not re-run
  them. Keeping your own suppression list is your job, not something a stateless lookup can do for
  you.

### FAQ

**Can I give it a name instead of a handle?**
Yes, and it will tell you it guessed. The name is collapsed to its letters and digits and tried as a
handle on each platform. `matchConfidence` will be `medium` at best on the strength of that alone.

**How do I make sure I am not mixing up two people with the same handle?**
Set "How strictly should profiles be matched?" to **Linked**. Then a profile is only accepted when
something on it cross-references another profile found for the same creator, or when you supplied it
by URL yourself. Everything else is reported as `NOT_LINKED` and not charged.

**Why is Instagram more expensive than the others?**
Because Instagram is the one platform here that requires a residential proxy. A datacenter IP gets
its login shell, which contains no profile data at all. If you do not need Instagram, untick it.

**Does it find email addresses?**
It reports ones the creator published, in a bio or as a `mailto:` bio link. It never guesses an
address from a name and a company domain.

**Am I charged for a creator it could not find?**
No. A creator found nowhere, a creator whose only accounts are private, a creator whose profiles were
all refused, and (in Linked mode) a creator whose profiles cannot be confirmed are all free.

**A handle matched on one platform but it is clearly not the same person. Is that a bug?**
No, and the row says so. Running `khaby.lame` finds a real, private, zero-follower Instagram account
at instagram.com/khaby.lame that is not Khaby Lame, so that platform comes back `PRIVATE` with no
fields, and `matchConfidence` is `low` with `matchEvidence` naming the adapted handle. That is the
honest answer to "the same handle on two platforms". Use Linked mode when you need the stricter one.

**Can an AI agent call this directly?**
Yes. It is on the Apify MCP server, so an agent in Claude, Cursor or any other MCP client can find
and run it by name, and the REST endpoint above works from any script or workflow tool.

### Related actors

- [TikTok Profile Scraper](https://apify.com/accountable_eel/tiktok-profile-lookup) one platform in
  depth, when TikTok is the only one you care about.
- [Instagram Profile Scraper](https://apify.com/accountable_eel/ig-profile-scraper) the posts and
  reels behind an Instagram profile, not just the profile.
- [YouTube Channel Scraper](https://apify.com/accountable_eel/youtube-channel-lookup) subscriber
  count plus the channel's recent uploads, and a monitoring mode for new ones.
- [X Profile Scraper](https://apify.com/accountable_eel/x-profile-lookup) follower counts with a
  run-over-run change tracker, for watching one account over time.
- [Threads Profile Scraper](https://apify.com/accountable_eel/threads-profile-lookup) the Threads
  half on its own.

# Actor input Schema

## `creators` (type: `array`):

One creator per line. A handle ("mkbhd"), a name ("Marques Brownlee"), or a profile URL on any of the five platforms — each line comes back as ONE row with that creator’s TikTok, Instagram, YouTube, X and Threads profile side by side: followers, following, posts, verified, bio and every link they publish. A profile URL or an exact handle resolves far more reliably than a name, which has to be collapsed to a guessed handle; matchConfidence and matchEvidence always tell you which happened, and which platforms actually agree. Accepted formats: mkbhd, https://www.tiktok.com/@mkbhd, Marques Brownlee, https://www.youtube.com/@mkbhd, https://x.com/mkbhd. You're only charged for the ones we actually find — a miss costs nothing.

## `platforms` (type: `array`):

Only the platforms you pick here are requested. A creator costs exactly one request per selected platform, so dropping a platform is the real way to cut what a run costs — hiding a column is not. You are billed once per creator found on at least one of them, however many you check.

## `testRun` (type: `boolean`):

Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.

## `onlyFound` (type: `boolean`):

Only keep rows where something was actually found. Misses are always free, whether or not you show them here.

## `includeKeywords` (type: `array`):

Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.

## `excludeKeywords` (type: `array`):

Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.

## `maxResults` (type: `integer`):

Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit.

## `matchMode` (type: `string`):

"Same handle" tries the handle on every platform and accepts whatever public profile is there — fast and broad, but a handle can belong to two different people, which is why every row carries matchConfidence and matchEvidence. "Linked" only accepts a platform profile when its bio, its links or its website cross-reference another profile found for the same creator (or when you supplied it yourself as a URL); an account it cannot confirm is reported as NOT\_LINKED rather than dropped silently, and is never charged. Use "linked" when a false match costs you more than a missed one.

## `columns` (type: `array`):

Choose which pieces of information to include in each result row. All are included by default.

## `maxConcurrency` (type: `integer`):

Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.

## `proxyConfiguration` (type: `object`):

Apify Proxy config. Residential recommended for anti-bot-sensitive targets.

## Actor input object example

```json
{
  "creators": [
    "mkbhd",
    "mrbeast",
    "nasa"
  ],
  "platforms": [
    "tiktok",
    "instagram",
    "youtube",
    "x",
    "threads"
  ],
  "testRun": false,
  "onlyFound": false,
  "includeKeywords": [],
  "excludeKeywords": [],
  "matchMode": "sameHandle",
  "columns": [
    "input",
    "tiktokUrl",
    "tiktokHandle",
    "tiktokFollowers",
    "tiktokFollowing",
    "tiktokPosts",
    "tiktokVerified",
    "tiktokBio",
    "tiktokStatus",
    "instagramUrl",
    "instagramHandle",
    "instagramFollowers",
    "instagramFollowing",
    "instagramPosts",
    "instagramVerified",
    "instagramBio",
    "instagramStatus",
    "youtubeUrl",
    "youtubeHandle",
    "youtubeFollowers",
    "youtubeFollowing",
    "youtubePosts",
    "youtubeVerified",
    "youtubeBio",
    "youtubeStatus",
    "xUrl",
    "xHandle",
    "xFollowers",
    "xFollowing",
    "xPosts",
    "xVerified",
    "xBio",
    "xStatus",
    "threadsUrl",
    "threadsHandle",
    "threadsFollowers",
    "threadsFollowing",
    "threadsPosts",
    "threadsVerified",
    "threadsBio",
    "threadsStatus",
    "displayName",
    "totalFollowers",
    "platformsFound",
    "largestPlatform",
    "bioLinks",
    "websiteUrl",
    "businessEmail",
    "businessEmailSource",
    "matchConfidence",
    "matchEvidence"
  ],
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "creators": [
        "mkbhd",
        "mrbeast",
        "nasa"
    ],
    "includeKeywords": [],
    "excludeKeywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("accountable_eel/creator-profile-unified-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 = {
    "creators": [
        "mkbhd",
        "mrbeast",
        "nasa",
    ],
    "includeKeywords": [],
    "excludeKeywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("accountable_eel/creator-profile-unified-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 '{
  "creators": [
    "mkbhd",
    "mrbeast",
    "nasa"
  ],
  "includeKeywords": [],
  "excludeKeywords": []
}' |
apify call accountable_eel/creator-profile-unified-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,accountable_eel/creator-profile-unified-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/ATYsuWObWI6U6OXeo/builds/Rq8WfihKbgVICPrcS/openapi.json
