TikTok Discover Scraper By Account Name & Bio
Under maintenancePricing
from $2.99 / 1,000 results
TikTok Discover Scraper By Account Name & Bio
Under maintenanceGather TikTok Discover insights fast — trending topics, challenges, sounds, and creator highlights. Clean, structured output makes it perfect for marketing teams, analysts, and researchers tracking viral shifts.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
0
Monthly active users
10 days ago
Last modified
Categories
Share
TikTok Account Scraper — Bios, Followers and Bio Links by Keyword
TikTok Account Scraper turns a single keyword — a brand, a niche, or a person's name — into a list of real TikTok accounts, each one read from its own profile page for an accurate @handle, display name, bio, bio link, follower count, total likes and verified-badge status. It is built for brand-protection teams, marketing agencies and researchers who need to find every account using a term, not just the one they already know. Optional video rows from the same keyword ship alongside, in the original scraper's shape.
What is TikTok Account Scraper?
TikTok Account Scraper searches TikTok for a keyword and returns the accounts behind it, not just the videos. Every match is then loaded from its own profile page, so the bio, bio link, follower count, total likes, following count and video count are the account's real, current numbers — not a snippet lifted from a search-result card. No TikTok account, login, or cookie is required; every request runs logged out, and results come back as structured JSON.
- 🔍 Keyword or handle discovery — a brand, niche, person,
@handleor a fulltiktok.com/search?q=…URL finds accounts through TikTok's account-search results, the free account card folded into video search, or the creators behind the keyword's top videos. - 📖 Real profile-page bios — bio, bio link, follower count, total likes, following count and video count are read from the account's own page, never guessed from a search card.
- 🛡️ Brand-protection flags — verified badge, TikTok's own organization/business-account flags, and a configurable disclaimer-phrase match against the bio text.
- 🎯 Relevance ranking and filtering —
requireKeywordInNameOrBiokeeps only accounts whose handle, display name or bio literally carries the term;minAccountFollowersdrops small accounts before they reach your dataset. - 🎥 Original video rows retained — the same keyword's video results (caption, stats, music, author, hashtags) still ship when
accountsOnlyis off, so this actor is a drop-in replacement for a plain TikTok discover/search scraper. - 📤 Structured JSON export — download from the Apify dataset as JSON, CSV, Excel, HTML table or XML.
What data can I extract with TikTok Account Scraper?
Every account row carries the identity, bio and brand-protection fields below, read directly from the account's own profile page (or, where TikTok's account-search surface answered, from that surface instead).
| Field | Example Value | Use Case |
|---|---|---|
account.username | "nike" | The @handle to link out to or dedupe on |
account.displayName | "Nike" | Human-readable name for reports and dashboards |
account.userId | "208464585232822272" | TikTok's numeric user ID, a stable join key |
account.secUid | "MS4wLjABAAAA..." | The opaque key other TikTok endpoints require downstream |
account.bio | "Just Do It." | Full bio text, read from the profile page |
account.bioLink | "http://empli.fi/niketiktok" | The account's own link-in-bio, for lead capture |
account.followerCount | 8987025 | Audience size — sort on it or filter with minAccountFollowers |
account.totalLikes | 48121910 | Lifetime engagement signal |
account.followingCount | 89 | Low following + high followers is a common brand-account signature |
account.videoCount | 1083 | Content volume |
account.verifiedBadge | true | TikTok's blue-check flag |
account.isOfficialProperty | null | TikTok's enterprise-verification reason string — account-search surface only |
account.isOrganizationAccount | true | TikTok's own organization flag, from the profile page |
account.isBusinessAccount | true | TikTok's own commerce/business-account flag |
account.businessCategory | "Sports, Fitness & Outdoors" | The account's declared TikTok Business category |
account.bioMentionsDisclaimer | false | Whether the bio contains a configured disclaimer phrase |
account.matchedIn | ["username","displayName"] | Where the keyword actually appears |
account.source | "exact_handle" | Which discovery route found the account |
account.hydratedFromProfilePage | true | Whether this row's fields came from the account's own page |
account.avatarUrl | "https://p16-common-sign.tiktokcdn.com/..." | Signed avatar image URL (expires) |
account.profileUrl | "https://www.tiktok.com/@nike" | Direct link to the account |
🛡️ Brand-protection and verification signals
The fields that actually decide whether an account is the real brand, a partner, or a look-alike sit together on every row: verifiedBadge (TikTok's badge), isOrganizationAccount and isBusinessAccount (TikTok's own account-type flags, read from the profile page), isOfficialProperty (TikTok's enterprise_verify_reason, present only on rows sourced from the account-search endpoint), and bioMentionsDisclaimer with its matched phrases in disclaimerTermsMatched. A concrete read: an account carrying your brand keyword with no verified badge, no organization flag, and a bio containing "parody" or "fan account" is a self-declared unofficial account sitting next to your real one in the same result set — worth a manual review before assuming it is malicious.
🎯 Discovery and targeting fields
Because TikTok accounts have no location or price to filter on, the fields you actually segment by are provenance and relevance: account.source tells you which of five routes found the row (user_search, user_search_ssr, video_search_card, video_author, exact_handle); account.hydratedFromProfilePage says whether the row's fields came from the account's own page or a search-result fallback; and account.matchedIn tells you whether the keyword is actually in the handle, display name or bio, versus an account merely relevant to the term's content. Combine minAccountFollowers with requireKeywordInNameOrBio to shrink a broad keyword pull down to a shortlist you can act on directly.
Why not build this yourself?
TikTok does not publish a self-serve API for "find accounts by keyword." Its official developer surfaces — Login Kit, the Content Posting API, the Research API — are scoped to your own authenticated account or to an approved research grant; none of them let an outside caller search arbitrary accounts by a brand term or niche keyword. Building an equivalent scraper against TikTok's own web endpoints means solving several problems this actor already handles:
- The two endpoints this actor depends on are signature-gated.
GET /api/search/user/full/(accounts) andGET /api/search/general/full/(videos) answer HTTP 200 with a zero-byte body to any plain HTTP client — even one carrying a live browser's own session cookies. Only a request signed inside a loadedtiktok.compage, by TikTok's ownwebmssdk.js, produces real data, which means a real headless browser is mandatory, not optional. - Pagination silently breaks without TikTok's own token. Page 2 and beyond require threading
search_id— taken from page 1'slog_pb.impr_id— alongside the cursor. Omit it and TikTok answers with zero rows andhas_more: false, with no error to tell you why. - The anti-bot challenge rotates by fingerprint and by exit IP, so a fixed browser profile or a single proxy tier will clear TikTok on one run and get the WAF challenge page on the next. A working scraper needs an escalation ladder across proxy tiers, not a static configuration.
- A retried request must never re-scrape from page one, or the same accounts get pushed — and billed — twice.
None of that is a reason to avoid TikTok data; it is the reason to run a maintained actor instead of a one-off script. If you only ever need one or two known accounts checked occasionally, a manual profile visit is enough. For repeatable, keyword-driven discovery across many terms, this actor absorbs the signing, pagination and proxy-escalation work for you.
How to use data extracted from TikTok?
🛡️ Brand protection and legal teams
Put your trademarked name or product line into startUrls, turn on requireKeywordInNameOrBio so only accounts that literally carry the term in their handle, name or bio come back, and sort the dataset by accountFollowers descending. From there, isOfficialProperty, verifiedBadge, isOrganizationAccount and bioMentionsDisclaimer tell you, row by row, which accounts are your verified property, which are legitimate partners, and which are unverified look-alikes worth a closer look or a takedown request. Because every row also carries account.profileUrl, the shortlist is one click away from the live page for manual confirmation.
📊 Marketing and social-listening agencies
Agencies managing several client brands can run one keyword — the client's brand name — per scheduled task, using Apify's built-in Schedules to re-run weekly. Comparing account.source and account.matchedIn run over run surfaces newly created impersonators and newly verified competitor handles without re-reading the whole result set by hand each time.
🔬 Market research and intelligence
Feed a niche keyword — "dermatologist", "running coach", "skincare doctor" — across several related terms in one run and export accountFollowers, accountTotalLikes, account.videoCount and account.isBusinessAccount to map how many creators versus brand accounts occupy that niche, and how their audience sizes distribute, without opening a single profile by hand.
🤖 AI agents and automated pipelines
account.secUid and account.userId are the stable keys other TikTok-facing tools expect, which makes this actor a clean discovery step in front of an enrichment agent or a RAG pipeline: resolve a brand or niche keyword to accounts here, then hand the IDs downstream. Because the actor runs through the standard Apify API, a scheduled pipeline can call it, wait for the run to finish, and pull the dataset with no manual step in between.
🔼 Input sample
Configure the run from the Actor's input form, or send the same fields as JSON through the Apify API. Only startUrls is required — every other field has a working default.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array of strings | One search term per line: a brand, a niche, a person, an @handle, or a tiktok.com/search?q=… URL. @handles and profile/tag links are converted to their term text. Every row carries the term that produced it in account.matchedQuery. | ["nike", "dermatologist", "@charlidamelio"] |
maxAccountsPerQuery | No | integer (0–100) | How many account rows to keep per term. 0 skips accounts entirely and returns only video rows. Each account costs one extra profile-page load. Default 10. | 10 |
accountsOnly | No | boolean | true = dataset contains account rows only, no video rows. The keyword's video results may still be read internally for account discovery — they are never written to the dataset or charged. Default false. | false |
discoverAccountsViaVideos | No | boolean | true (recommended) = when TikTok's account-search endpoint returns nothing, fall back to the unique creators behind the term's top videos, tagged account.source = "video_author". false = account-search only; a refusal returns zero account rows. Default true. | true |
requireKeywordInNameOrBio | No | boolean | true = keep an account only if the term literally appears in its @handle, display name or bio (account.matchedIn is then never empty). Default false. | false |
minAccountFollowers | No | integer (min 0) | Drop accounts below this follower count. 0 keeps everything; the actor pages deeper when a floor is set so the requested count can still be filled after filtering. Default 0. | 10000 |
disclaimerKeywords | No | array of strings | Case-insensitive phrases that flag an account as self-declared unofficial. Leave empty to use the built-in list (not affiliated, fan account, fan page, parody, unofficial, not associated). | ["not affiliated", "fan account", "parody"] |
mergeVideoSearchAccountCards | No | boolean | Folds the free account card TikTok returns alongside video search into the account rows, deduplicated on uid and tagged account.source = "video_search_card". Default true. | true |
maxItems | No | integer (0–500) | Video rows per term, in the original scraper's shape, when accountsOnly is off. 0 = go as deep as TikTok serves, with a hard stop at 200 videos per term. Default 10. | 10 |
proxyConfiguration | No | object | Apify Proxy configuration. Leave off unless a run gets blocked — enabling it adds your chosen proxy group to the front of the built-in direct → datacenter → residential escalation ladder. | {"useApifyProxy": false} |
{"startUrls": ["nike", "dermatologist"],"maxAccountsPerQuery": 15,"accountsOnly": false,"discoverAccountsViaVideos": true,"requireKeywordInNameOrBio": false,"minAccountFollowers": 5000,"disclaimerKeywords": ["not affiliated", "fan account", "fan page", "parody", "unofficial"],"mergeVideoSearchAccountCards": true,"maxItems": 10,"proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: maxItems: 0 does not mean "unlimited" — it means "go as deep as TikTok serves," which is hard-capped internally at 200 video rows per term. If you actually want the schema's ceiling of 500 video rows for a term, set maxItems to 500 explicitly rather than 0. Separately, the schema note on mergeVideoSearchAccountCards says the field is "ignored when Accounts only is ON" — in the source, the free-card merge step runs whenever the internal video search executes for account discovery, which can still happen with accountsOnly on if discoverAccountsViaVideos is on and the direct account search hasn't already filled your quota. In that case a video-search account card can still be merged into your account rows even with accountsOnly set to true.
🔽 Output sample
Output is typed, normalized JSON with one consistent row shape shared by account rows and video rows — fields that don't apply to a given row type are null or [], never a faked value. Export from the Storage tab as JSON, CSV, Excel, HTML table or XML.
Account row (video-only nested objects collapsed to "..." for readability — every key inside them is still present and null):
{"rowType": "account","hashtag": "nike","count": 1,"scrapedAt": "2026-07-29T12:07:20Z","accountUsername": "nike","accountDisplayName": "Nike","accountFollowers": 8987025,"accountTotalLikes": 48121910,"accountVerifiedBadge": true,"accountOfficialProperty": null,"accountBioDisclaimsAffiliation": false,"accountBio": "Just Do It.","accountBioLink": "http://empli.fi/niketiktok","accountProfileUrl": "https://www.tiktok.com/@nike","accountSource": "exact_handle","videoAuthor": null,"account": {"username": "nike","displayName": "Nike","userId": "208464585232822272","secUid": "MS4wLjABAAAA...","bio": "Just Do It.","followerCount": 8987025,"totalLikes": 48121910,"verifyReason": null,"customVerifyText": null,"verifiedBadge": true,"isOfficialProperty": null,"bioMentionsDisclaimer": false,"disclaimerTermsMatched": [],"matchedIn": ["username", "displayName"],"avatarUrl": "https://p16-common-sign.tiktokcdn.com/...","profileUrl": "https://www.tiktok.com/@nike","resultPosition": 1,"matchedQuery": "nike","source": "exact_handle","bioLink": "http://empli.fi/niketiktok","privateAccount": false,"region": null,"followingCount": 89,"videoCount": 1083,"friendCount": null,"isOrganizationAccount": true,"isBusinessAccount": true,"businessCategory": "Sports, Fitness & Outdoors","hydratedFromProfilePage": true},"id": null,"text": null,"createTime": null,"createTimeISO": null,"isAd": null,"isMuted": null,"authorMeta": "...","musicMeta": "...","webVideoUrl": null,"mediaUrls": [],"videoMeta": "...","diggCount": null,"shareCount": null,"playCount": null,"collectCount": null,"commentCount": null,"mentions": [],"hashtags": [],"effectStickers": [],"isSlideshow": null,"isPinned": null,"input": "nike","discoveryInfo": {"breadcrumbs": [],"relatedTags": [],"url": "https://www.tiktok.com/search/user?q=nike","tag": "nike","type": "account"}}
Video row (account-only fields are null; requires accountsOnly: false):
{"rowType": "video","hashtag": "nike","count": 1,"scrapedAt": "2026-07-29T12:08:05Z","account": null,"accountUsername": null,"accountDisplayName": null,"accountFollowers": null,"accountTotalLikes": null,"accountVerifiedBadge": null,"accountOfficialProperty": null,"accountBioDisclaimsAffiliation": null,"accountBio": null,"accountBioLink": null,"accountProfileUrl": null,"accountSource": null,"videoAuthor": "nike","id": "7328225833821244715","text": "New drop. #nike #running","createTime": 1706235571,"createTimeISO": "2024-01-26T02:19:31.000Z","isAd": false,"isMuted": false,"authorMeta": {"id": "6745789268591494150", "name": "nike", "nickName": "Nike","verified": true, "signature": "Just Do It.", "bioLink": null,"avatar": "https://p19-pu-sign-useast8.tiktokcdn-us.com/...","privateAccount": false, "following": 89, "fans": 8987025,"heart": 48121910, "video": 1083, "digg": 12},"musicMeta": {"musicName": "original sound", "musicAuthor": "Nike", "musicOriginal": true,"musicAlbum": "", "playUrl": "https://v16m.tiktokcdn-us.com/...","coverMediumUrl": "https://p16-sign-useast2a.tiktokcdn.com/...","musicId": "7321041103715683104"},"webVideoUrl": "https://www.tiktok.com/@nike/video/7328225833821244715","mediaUrls": ["https://v16-webapp-prime.us.tiktok.com/video/..."],"videoMeta": {"height": 1024, "width": 576, "duration": 9,"coverUrl": "https://p16-sign.tiktokcdn-us.com/...","originalCoverUrl": "https://p16-sign.tiktokcdn-us.com/...","definition": "540p", "format": "mp4","originalDownloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/...","downloadAddr": "https://v16-webapp-prime.us.tiktok.com/video/...","subtitleUrls": [], "slideshowImages": []},"diggCount": 82000,"shareCount": 7254,"playCount": 1100000,"collectCount": 33600,"commentCount": 251,"mentions": [{ "userUniqueId": "runningcoachjoe", "userId": "12345", "secUid": "MS4wLj...","profileUrl": "https://www.tiktok.com/@runningcoachjoe" }],"hashtags": [{ "id": "9128", "name": "nike", "title": "", "cover": "" },{ "id": "40201396", "name": "running", "title": "", "cover": "" }],"effectStickers": [],"isSlideshow": false,"isPinned": false,"input": "nike","discoveryInfo": {"breadcrumbs": [], "relatedTags": [],"url": "https://www.tiktok.com/search?q=nike","tag": "nike", "type": "search"}}
The default dataset view is a subset. The Console's default table renders 25 columns (
rowType,accountUsername,accountDisplayName,accountFollowers,accountTotalLikes,accountVerifiedBadge,accountOfficialProperty,accountBioDisclaimsAffiliation,accountBio,accountBioLink,accountProfileUrl,accountSource,hashtag,count,id,text,createTimeISO,createTime,videoAuthor,playCount,diggCount,commentCount,webVideoUrl,scrapedAt,input) for readability. The underlying row — shown in full above — carries every nestedaccount.*,authorMeta.*,musicMeta.*andvideoMeta.*key regardless of which view you look at; switch to JSON in the Storage tab to see it all.
How do you filter and target specific accounts?
Getting a keyword pull down to the exact accounts you want to act on comes down to three controls. First, how you phrase startUrls: an exact @handle or profile URL targets one known account directly; a bare brand or niche word triggers the full three-source discovery (account search, video-search card, video creators); a ready-made tiktok.com/search?q=… URL is accepted as-is and converted to its term text. Second, quality thresholds: requireKeywordInNameOrBio removes every account whose profile text doesn't literally carry your term — essential for impersonation sweeps, harmful for niche discovery where relevant creators may not repeat the word — while minAccountFollowers removes small accounts before they are charged. Third, volume controls: maxAccountsPerQuery (0–100) caps rows per term, and setting a follower floor makes the actor page deeper internally so the cap can still be filled after filtering; maxItems (0–500) does the same for the optional video rows, with 0 meaning "as deep as TikTok serves, capped at 200."
{ "startUrls": ["Nike"], "requireKeywordInNameOrBio": true, "accountsOnly": true, "maxAccountsPerQuery": 30 }
Brand-impersonation sweep: only accounts that literally carry "Nike" in their handle, name or bio, no video rows.
{ "startUrls": ["dermatologist", "skincare doctor"], "maxAccountsPerQuery": 50, "minAccountFollowers": 5000, "discoverAccountsViaVideos": true }
Broad niche discovery: up to 50 accounts per term, floor of 5,000 followers, falling back to video creators when the account-search endpoint is refused.
{ "startUrls": ["@charlidamelio"], "accountsOnly": false, "maxItems": 25, "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] } }
One known account plus its keyword's video rows, run through a residential proxy.
▶️ Want to try other TikTok scrapers?
| Scraper | What it extracts |
|---|---|
| ../tiktok-hashtag-scraper-hashtag-reach-co-tag-stats | Hashtag reach, view counts and co-occurring tag statistics |
| ../tiktok-profile-videos-api-scraper-reposted-videos | A known account's own video and repost history |
| ../Tiktok%20Ads%20Scraper | TikTok Creative Center ad performance and insights |
| ../Instagram%20Followers%20Scraper | Follower lists for a given Instagram account |
| ../Instagram%20Profile%20Phone%20Number%20Scraper | Contact details enriched from an Instagram profile |
| ../instagram-profile-reels-scraper-with-creator-profiles | Instagram reels joined with the creator's own profile data |
How to extract TikTok data programmatically
This actor runs like any other Apify Actor: one API call starts the run, and the result lands in a standard Apify dataset you pull with the Apify API or an official client library — no separate signup, credential or webhook surface beyond your Apify API token.
🐍 Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("SimpleAPI/tiktok-discover-scraper-by-account-name-bio").call(run_input={"startUrls": ["nike", "dermatologist"],"accountsOnly": True,"maxAccountsPerQuery": 20,"requireKeywordInNameOrBio": True,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():account = row["account"]print(account["username"], account["followerCount"], account["verifiedBadge"])
📊 Export to spreadsheets or CRM
Export the dataset as CSV directly from the Storage tab, or connect it through an Apify integration to Google Sheets or your CRM. Map accountUsername to a Contact/Handle column, accountFollowers and accountTotalLikes to size fields, and accountBioLink to a Website/Link column for outreach lists.
Is it legal to scrape TikTok?
Scraping publicly visible TikTok profile data is generally lawful: this actor reads only what an account's owner has already published on a page anyone can open without logging in — handle, display name, bio, bio link and public counters. Because these profiles frequently belong to individuals rather than businesses, the personal-data regime applies: GDPR in the EU/UK and CCPA/CPRA in California govern how you may store and use any personal data you collect this way, and you need a lawful basis for retaining it, particularly at scale. This actor extracts no private data — no messages, no email addresses, no data behind a login — and requires no TikTok account or credential to run. Consult legal counsel for commercial applications involving bulk storage of personal data.
❓ FAQ
What happens if a searched handle doesn't exist?
Nothing is invented. When the actor tries the handle your keyword most likely points to (Nike Football → @nikefootball) and that account doesn't exist, its profile page carries no user-detail node and the actor simply emits no row for that guess — it does not fabricate a placeholder account.
Can I get video rows along with account rows?
Yes. Leave accountsOnly off (its default) and set maxItems for videos per term. With accountsOnly on, the actor may still read the keyword's video results internally — because their creators are one of the account-discovery routes — but it never writes or charges for those video rows.
How accurate are the bio and follower numbers?
They are read from the account's own profile page (or TikTok's account-search endpoint) at the moment your run executes, so they reflect TikTok's current state, not a cached snapshot. For totalLikes specifically, the actor reads TikTok's statsV2 string field first and falls back to the numeric stats field only if needed, because stats.heartCount can silently overflow a 32-bit integer on very large accounts.
How many accounts or videos can I get per run?
maxAccountsPerQuery accepts 0–100 accounts per search term. maxItems accepts 0–500 video rows per term; setting it to 0 does not mean unlimited, it means TikTok is paged as deep as it serves, hard-capped at 200 video rows per term.
How do I find accounts impersonating my brand?
Set startUrls to your brand name, turn on requireKeywordInNameOrBio, and inspect verifiedBadge, isOrganizationAccount and bioMentionsDisclaimer on the results. An unverified account carrying your name with a bio disclaiming affiliation is the profile worth reviewing first.
Does this work with Claude, ChatGPT, or AI agent frameworks?
There is no dedicated MCP server for this actor. Any agent framework that can call the Apify API — including custom tool wrappers around apify-client — can start a run, poll for completion, and read the resulting dataset as a standard HTTP call.
How does this compare to other TikTok scrapers?
As observed on their public listings on 2026-07-30: clockworks/tiktok-discover-scraper returns videos and basic creator snippets for a hashtag, but does not run a dedicated account search by keyword or read each creator's own profile page for brand-protection flags. khadinakbar/tiktok-profile-scraper reads rich profile data too, but requires you to already know the usernames or profile URLs — it has no keyword-to-account discovery step. This actor's account rows, by contrast, start from a keyword and end on the account's own profile page, with account.source and account.matchedIn documenting exactly how each one was found.
Can I use this without a TikTok account or developer credentials?
Yes. No TikTok login, cookie, session token or developer API key is required anywhere in this actor — every request runs logged out.
Why is account.isOfficialProperty usually null?
It mirrors TikTok's enterprise_verify_reason string, which exists only on rows returned by the account-search endpoint. Rows hydrated from a profile page (most of them, when the account-search endpoint is refused) don't carry that field on TikTok's side, so it stays null rather than being guessed from the verified badge.
Conclusion
TikTok Account Scraper turns a keyword into a filtered, verified list of the real TikTok accounts behind it — bio, bio link, follower count and brand-protection flags read from each account's own profile page, with every row's discovery route and keyword match documented so you can trust what you're looking at. It's built for brand-protection teams, agencies running repeat sweeps, and researchers mapping a niche's creator landscape. Open the actor in the Apify Console, drop in your first keyword, and click Start to see your first set of matched accounts.