# TikTok Lookalike Finder · Similar Creators · No Login (`memo23/tiktok-lookalike-finder`) Actor

Find TikTok creators similar to any account. Reads the seed's own videos, matches creators posting in the same niche, and ranks them 0-1 by shared topics and audience size. Followers, likes, engagement, language and bio emails per creator. Multiple seeds, filters, no login.

- **URL**: https://apify.com/memo23/tiktok-lookalike-finder.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 19 total users, 18 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 lookalike creators

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

## TikTok Lookalike Finder

**Find TikTok creators similar to any account: matched on what their videos are about, ranked 0–1, with followers, engagement and bio emails.** Give it one or more creators you want more of. It reads their latest videos, works out the niche from the hashtags they keep coming back to, collects the creators posting in that niche, and ranks them by how much of it they share and how close their audience size is. No login, no cookies.

| Input | What you get |
|---|---|
| `brynn_ann` (sourdough, 177k) | Ranked sourdough and baking creators, most with a business email |
| `romantrains` + `marielaxfit` | Fitness creators, the ones matching both seeds first |
| Any seed + `maxFollowers: 100000` | Micro-influencers in the same niche |

### Why Use This Scraper?

- **It matches on content, not on TikTok's suggestions.** TikTok's "suggested accounts" for a logged-out visitor is the same celebrity list whoever you ask about: a sourdough baker and a comedian both get Bad Bunny and The Rock. This actor reads what the seed actually posts.
- **Measured before release.** On five niches, the top 10 were the seed's own niche 8 to 10 times out of 10 for sourdough, home workouts, tech reviews and travel. A sourdough seed returned 12 of 12 sourdough and baking creators, 8 of them with a business email in their bio.
- **Several seeds rank together.** A creator matching two of your seeds outranks one matching only one, so a short list of your best partners finds their closest peers.
- **Contact-ready.** Business emails are pulled from each creator's bio, and `onlyWithEmail` keeps just the ones you can reach.
- **Filters that matter for outreach:** follower range (find micro-influencers), content language, exclude lists, private accounts.
- **Pay per creator delivered.** A seed that can't be read costs nothing.

### How It Works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-tiktok-lookalike.png" alt="How the TikTok Lookalike Finder works" width="900" />
</p>

1. **Read the seed** — its profile and its last 30 videos.
2. **Find its niche** — the hashtags it uses again and again, minus the ones on every video (#fyp, #viral, #ad…). A creator who never hashtags is matched on the words its captions and bio repeat instead, and those rows say `matchMethod: "keywords"`.
3. **Collect creators** posting under each niche term.
4. **Score** each one 0–1: 70% for how many of the seed's terms it shares, 30% for how close its follower count is. With several seeds the score is the mean over all of them.
5. **Filter and deliver** the best matches, each with its profile, a bio email when there is one, and engagement over the videos the run saw.

### Input

| Field | Type | Required | Notes |
|---|---|---|---|
| `seeds` | array of strings | Yes | Usernames, @handles or profile URLs. |
| `maxResults` | integer | No | Ranked creators to return. Default `50`, max `1000`. |
| `minFollowers` / `maxFollowers` | integer | No | Follower range to keep. |
| `languages` | array of strings | No | Content languages to keep, as two-letter codes (`en`, `es`, `de`). |
| `excludeUsernames` | array of strings | No | Creators never to return, e.g. ones you already work with. |
| `onlyWithEmail` | boolean | No | Keep only creators with an email in their bio. Default `false`. |
| `includePrivate` | boolean | No | Include private accounts. Default `false`. |
| `termsPerSeed` | integer | No | Niche terms searched per seed. Default `6`, max `12`. |
| `pagesPerTerm` | integer | No | Pages of creators read per term. Default `1`, max `3`; more pages, bigger pool. |

#### Example input

```json
{
    "seeds": ["romantrains", "marielaxfit"],
    "maxResults": 50,
    "maxFollowers": 600000,
    "languages": ["en"],
    "onlyWithEmail": true
}
```

### Output Schema

One dataset row per creator, best match first.

```jsonc
{
    "rank": 1,
    "username": "littleranchfamily",
    "profileUrl": "https://www.tiktok.com/@littleranchfamily",
    "nickname": "Little Ranch Family",
    "bio": "🥐 Sourdough Recipes & Tips\n🎂 Pastry Chef ...",
    "email": "support@littleranchfamily.com",
    "emails": ["support@littleranchfamily.com"],
    "followers": 123300,
    "hearts": 4100000,
    "videoCount": 610,
    "verified": false,
    "region": null,                       // present when TikTok reports it
    "language": "en",
    "avatarUrl": "https://...",
    "matchScore": 0.984,                  // 0-1, see How It Works
    "matchedSeeds": ["brynn_ann"],
    "sharedTerms": ["sourdough", "sourdoughbread", "sourdoughstarter", "sourdoughbaking", "sourdoughtips", "sourdoughtok"],
    "matchMethod": "hashtags",            // "keywords" when the seed uses no hashtags
    "sampleEngagementRate": 0.041,        // (likes+comments+shares)/views over the videos this run saw
    "sampleVideoCount": 4,
    "sampleVideos": ["https://www.tiktok.com/@littleranchfamily/video/..."],
    "scrapedAt": "2026-10-01T21:40:12.000Z"
}
```

A seed that can't be used returns a row with `error`, `message` and `errorKind` instead: `seed_not_found`, `invalid_username`, or `no_niche_signal` for a private seed or one whose videos give nothing to match on.

### Pricing

Pay per event.

| Event | Price | When |
|---|---|---|
| Creator | $0.03 | One per creator delivered |
| Actor start | $0.005 | Once per run, per GB of memory |

Seeds that can't be read and creators removed by your filters are never charged.

### Free Apify plan

On the free Apify plan, a run takes 1 seed and returns up to 20 creators, and the first 3 come back in full, so you can check the data. After that, rows keep the rank, username, profile URL, nickname, verified flag, region, language, matched seeds and match method, while the bio, email, avatar URL, shared terms, sample video links and sample engagement rate are hidden and the follower, heart and video counts and the match score are rounded to their order of magnitude, and a `freePlanNote` field marks those rows. Any paid Apify plan returns every field in full.

### Use Cases

- **Influencer campaigns** — start from the three creators who performed best for you and get their closest peers, ranked.
- **Micro-influencer discovery** — set `maxFollowers` and get the smaller creators in a big creator's niche, who are cheaper and often convert better.
- **Agency prospecting** — build niche creator lists with business emails in one run.
- **Competitive mapping** — see who else posts in a competitor's niche and at what size.

### FAQ

**Why not use TikTok's own "suggested accounts"?**
Because for a logged-out request it isn't personalised. Ask about a sourdough baker or a comedian and you get the same list of pop stars. Matching on the seed's own content is what makes the results specific.

**What does `matchMethod: "keywords"` mean?**
The seed never uses hashtags, so its niche was taken from the words its captions and bio repeat. These matches are broader than hashtag matches — expect a looser niche fit for seeds like that.

**Why do scores look lower with several seeds?**
The score is the mean over every seed, and a creator matching one seed of two scores 0 for the other. Creators matching all your seeds rise to the top, which is the point.

**Is the engagement rate the creator's real average?**
It is computed over the videos this run saw for that creator, usually one to four, and says so in `sampleVideoCount`. Treat it as a quick signal, not an audit.

**Do I need a TikTok account?**
No. Nothing here logs in.

### Notes & Limitations

- Seeds with a hidden or empty video history can't be matched and return a `no_niche_signal` row.
- `region` is only filled when TikTok reports it, which is not the case for every creator, so there is no region filter; use `languages` to narrow by audience.
- Very large, niche-less accounts (celebrities who post without hashtags) make poor seeds. Pick creators whose content is clearly about something.

### 🤖 For AI Agents & LLM Apps

One required field, a flat ranked output and a numeric `matchScore` make this an easy tool call: pass `seeds`, optionally a follower range and `onlyWithEmail`, then read the rows in order. `sharedTerms` and `matchedSeeds` say why each creator matched, which an agent can quote when proposing a shortlist. Available over the Apify API and MCP.

### Support

Got a seed that returns poor matches? Open an issue with the handle and what you expected, and it gets looked at.

### ⚠️ Disclaimer

This actor reads only what TikTok shows publicly without logging in: profiles, public videos and their hashtags. It does not log in, bypass privacy settings or access private accounts' content. You are responsible for how you use the data, including GDPR, CAN-SPAM, ePrivacy and any other law that applies to contacting people. Emails in a creator's bio are personal data in most jurisdictions: have a lawful basis before you use them, and honour opt-outs.

### SEO Keywords

tiktok lookalike, tiktok lookalike creators, similar tiktok accounts, tiktok similar creators finder, tiktok influencer search, tiktok influencer finder, find tiktok influencers, tiktok creator discovery, tiktok micro influencers, tiktok influencer emails, tiktok creator emails, influencer lookalike search, tiktok niche creators, no login tiktok scraper

# Actor input Schema

## `seeds` (type: `array`):

One or more TikTok accounts you want more of. A username, an @handle or a profile URL all work. With several seeds, creators matching more than one of them rank highest.

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

How many ranked creators to return, best match first.

## `minFollowers` (type: `integer`):

Drop creators below this follower count. Leave empty for no lower bound.

## `maxFollowers` (type: `integer`):

Drop creators above this follower count, for example to find micro-influencers. Leave empty for no upper bound.

## `languages` (type: `array`):

Only keep creators whose videos are in these languages, as two-letter codes such as en, es, de. Leave empty for any language.

## `excludeUsernames` (type: `array`):

Creators you already work with or never want returned.

## `onlyWithEmail` (type: `boolean`):

Keep only creators who publish a contact email in their TikTok bio.

## `includePrivate` (type: `boolean`):

Private accounts are left out by default, since there is nothing to review or contact them about.

## `termsPerSeed` (type: `integer`):

How many of the seed's own recurring hashtags (or caption keywords, when it uses no hashtags) to search. More terms widen the net and take longer.

## `pagesPerTerm` (type: `integer`):

How many pages of creators to read under each term. Two or three pages roughly double or triple the candidate pool.

## Actor input object example

```json
{
  "seeds": [
    "brynn_ann"
  ],
  "maxResults": 50,
  "onlyWithEmail": false,
  "includePrivate": false,
  "termsPerSeed": 6,
  "pagesPerTerm": 1
}
```

# 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 = {
    "seeds": [
        "brynn_ann"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/tiktok-lookalike-finder").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 = { "seeds": ["brynn_ann"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/tiktok-lookalike-finder").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 '{
  "seeds": [
    "brynn_ann"
  ]
}' |
apify call memo23/tiktok-lookalike-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/tiktok-lookalike-finder"
        }
    }
}
```

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/IWxHgJEbfXNU65RgC/builds/bErvkZQYp54UtGRkZ/openapi.json
