X (Twitter) profile qualifier and enricher
Hand any X username to this agent and get back a qualified, ICP-scored lead with a verified email and a resolved LinkedIn profile.
Build this with agnt_
Skip the copy-paste. We'll spin up a builder session prepopulated with this blueprint's spec — providers, schedule, database schema, and the questions the agent should ask you to personalize it for your product.
Sign up free · no credit card
The motion
Give the agent any X username — from a chat message, a webhook payload, or another agent's tool call — and it returns a single structured JSON result: ICP score with breakdown, hard-disqualify reason if any, the prospect's LinkedIn profile when resolvable, and a verified contact email when findable. Use it as a one-shot lookup tool, wire it into a form-fill webhook, or pair it with the X engager scraper to drain a leads table on autopilot.
X profile, X recent posts, LinkedIn profile, and verified email — all behind a single agntdata credential. The agent stitches them into one ranked lead.
Email finder + mandatory verifier on every result means your downstream sequencer only ever sees deliverable addresses. `risky` is surfaced with the flag flipped; `undeliverable` is discarded silently.
Hard disqualify gates fire before any LLM scoring or enrichment. A no-link, no-bio profile costs one X API call and zero enrichment credits — the rubric never sees it.
Every lead leaves with a 0–100 `lead_score`, an `icp_match` label, and (for high-fit ones) a 3–4 sentence personalized notes block your SDRs can paste into the opener.
This agent is the qualification + enrichment function in your stack. Hand it a handle, get a structured lead. Pair it with a scraping blueprint upstream and a CRM webhook downstream when you want the full pipeline; call it ad-hoc the rest of the time.
Build this with agnt_
Skip the copy-paste. We'll spin up a builder session prepopulated with this blueprint's spec — providers, schedule, database schema, and the questions the agent should ask you to personalize it for your product.
Sign up free · no credit card
Or copy a prompt into another platform
Prefer to build with OpenClaw, Hermes, or Claude Code? Drop this prompt into your agent of choice — it seeds the goal, the agntdata endpoints to use, and a step-by-step plan.
You are helping me build an X lead qualifier + enricher. The agent takes a single X username as input, fetches the profile, applies hard disqualify rules, scores against my ICP rubric, and (only for high-fit leads) resolves a LinkedIn URL and finds + verifies a contact email. It returns a structured JSON result.
REFERENCE DOCS (read these before writing code)
- Full agntdata API documentation: https://agnt.mintlify.app/apis/overview
- Endpoints we'll use (all behind one agntdata key):
- `twitter154 / User_Details` — fetch X profile (bio, location, link, followers)
- `twitter154 / User_s_Tweets` — fetch recent posts for content scoring
- `linkedin-data-api / Get_Profile_Data_By_URL` — fetch LinkedIn profile after we resolve the URL
- `agntdata-agnt / people_email_finder` — find an email from {linkedin_url} or {full_name + domain}
- `agntdata-agnt / people_email_verifier` — verify deliverability before we surface the email
- Plus the Exa connector for LinkedIn URL discovery and website summarization.
ABOUT MY PRODUCT
- Product: <YOUR PRODUCT — one sentence>
- Top ICPs (in priority order, with a 1-sentence "what they look like on X"):
1. <ICP 1>: <signals>
2. <ICP 2>: <signals>
3. <ICP 3 — optional>
- Tool stack mentions worth boosting (competitive or complementary tools — bio + recent posts):
- <tool 1, tool 2, tool 3, ...>
- Hard disqualify rules (in priority order; first hit wins):
1. <rule 1 — e.g. "no link in profile">
2. <rule 2 — e.g. "no bio">
3. <rule 3 — e.g. geographic / role-based filters>
WHAT TO BUILD
An agent (claude-haiku-4-5) on agntdata. It accepts an X username as input — from chat, a webhook payload, or another agent's tool call — and runs the pipeline once per invocation.
Step 1 — Parse input. Pull the X username from the user message (strip leading @, trim). If missing or malformed, respond "expected an X username" and stop.
Step 2 — Fetch X profile via `User_Details`. Hold the full response in scratchpad memory.
Step 3 — Hard disqualify gates (apply IN ORDER, stop on first hit). Use my rules above. If any fires: emit a structured "disqualified" result and stop. Do not run any further calls.
Step 4 — Run `fetch_x_recent_posts` skill ({ x_username }). It returns the recent tweets payload.
Step 5 — Run `fetch_website_summary` skill ({ website_url }) using the URL from the X profile. It returns a one-paragraph summary via Exa.
Step 6 — Run `score_lead` skill ({ x_profile, recent_posts, website_summary }). It calls Claude Sonnet with my rubric and returns `lead_score` (0–100), `score_breakdown` (jsonb), `icp_match`, `reasoning`, and `qualification_notes` (only when score > 50).
Step 7 — If `lead_score <= 50`: emit the structured "scored, not enriched" result and stop.
Step 8 — Enrichment (only when `lead_score > 50`):
8A. Parse `first_name` / `last_name` from the X display name. Extract `company_url` from the X profile link and `company_description` from the website summary.
8B. Search Exa for LinkedIn: `"<full name>" site:linkedin.com/in`. If a confidently-matching `linkedin.com/in/...` URL is returned, capture it.
8C. If we have a LinkedIn URL: call `Get_Profile_Data_By_URL` and capture the response.
8D. Email finder via `people_email_finder`: prefer `{ linkedin_url }`, fall back to `{ full_name, domain }`. `max_cost_cents: 50`. If neither viable: skip to the result with `email_enrichment_status = 'not_found'`.
8E. **Mandatory verify** via `people_email_verifier`. Only surface the email if status is `deliverable` (`email_verified = true`) or `risky` (`email_verified = false`). Discard `undeliverable`.
Step 9 — Emit the structured result. Always include:
```json
{
"x_username": "...",
"disqualified": false,
"disqualify_reason": null,
"lead_score": 72,
"icp_match": "<matched ICP>",
"score_breakdown": { ... },
"qualification_notes": "...",
"first_name": "...",
"last_name": "...",
"company_url": "...",
"company_description": "...",
"linkedin_profile_url": "...",
"linkedin_profile_details": { ... },
"website_summary": "...",
"email": "...",
"email_verified": true,
"email_enrichment_status": "found"
}
```
GUARDRAILS
- Never call X or LinkedIn directly — always go through the agntdata endpoints.
- Don't compute `lead_score` / `score_breakdown` from the agent — only the `score_lead` skill does.
- Verifier is mandatory before surfacing any email. No exceptions.
- Skip the email finder if you only have a first name and no domain — don't waste a call.
RECOMMENDED PIPELINE (optional)
This agent is a function: `x_username → qualified lead`. To turn it into a pipeline, pair it with the `x-engager-scraper` blueprint (which fills a `leads` table with X usernames from engaged threads) and add a thin upstream agent that polls the table and calls this one per row. Or simply pipe the structured result into a webhook to your CRM.
When ready, start by asking me the ABOUT MY PRODUCT questions.Paste into OpenClaw to scaffold this agent. Tweak the inputs and goal at the top of the prompt.
How to build it
6 steps. Each one links to the underlying agntdata endpoints — open them in a new tab to inspect parameters and pricing as you build.
Sign up at app.agntdata.dev/dashboard. One key gives you X profile + tweets, LinkedIn profile, agnt people email finder + verifier, and the Exa connector — credit-based pricing across all of it.
The CTA above seeds a builder session prefilled with this blueprint. The meta-agent walks you through your ICPs (with on-X signals for each), the tool stack mentions worth boosting in scoring, and your hard disqualify rules. It then generates the three skills and the agent.
Pick five X usernames you have an opinion on — three you would happily outbound, two that are obviously not your fit. Hand each to the agent and inspect the structured result. The good ones should score > 50, get qualification_notes, and trigger the enrichment branch (LinkedIn URL + verified email). The bad ones should score 0, set disqualify_reason, and never call the email finder. If either misbehaves, tune the rubric or the disqualify rules before going further.
The agent is now a function: `x_username → qualified lead JSON`. Pipe it wherever fits: a Slack /qualify slash command, a webhook from a form fill, or an inbound MCP tool call from another agent.
Run a sample. If high scores are landing on obvious misses, tighten the role + audience rubric. If real fits are stuck in the 30–50 range, loosen content scoring or add a bonus for your tool mentions. The rubric lives in the `score_lead` skill — change it, redeploy, and re-test.
When you are ready for the canonical "Twitter → ranked outbound queue" stack, you have two choices. (1) Build the `x-engager-scraper` blueprint upstream — it fills a `leads` table with X usernames from engaged threads in your topic space — and have a thin polling agent atomically claim rows and call this qualifier per row, writing the structured result back. (2) Pipe the result into a CRM via webhook and let your existing tooling persist it. Either way, this agent stays the same; only the trigger and the destination change.
Endpoints used
The agntdata endpoints this blueprint depends on. All available with one API key.
User Details
/user/details
Fetches the X profile for the input username — bio, location, link, follower count. Called once per invocation before any scoring or enrichment.
View endpoint docsUser's Tweets
/user/tweets
Fetches recent tweets for the content-score component of the rubric. Read by the scoring skill; not persisted unless the optional pipeline mode is configured.
View endpoint docsGet Profile Data By URL
/get-profile-data-by-url
Pulls the LinkedIn profile after Exa resolves the URL. Surfaced in the structured result so downstream plays (sequence personalization, account research) do not need to re-call LinkedIn.
View endpoint docsFind a person's professional email
/people/email-finder
Resolves a contact email for high-fit leads. Prefers LinkedIn URL → falls back to (full_name + domain). Capped via `max_cost_cents` and skipped entirely when the input is too thin to succeed.
View endpoint docsVerify a professional email
/people/email-verifier
MANDATORY before any email is surfaced. `deliverable` → return with `email_verified = true`, `risky` → return with `email_verified = false`, `undeliverable` → discard. Stops your sequencer from ever sending to a guess.
View endpoint docsShip this blueprint today
One click spins up a builder session prefilled with this blueprint's spec. We'll ask you a handful of personalization questions, then generate the agent.
Related blueprints
Browse all →Hand any LinkedIn profile URL to this agent and get back a qualified, ICP-scored lead with a verified email and a website summary attached.
Takes the partial hiring contacts a scraper produces and turns them into a sequenceable pipeline: verified emails for every lead, plus inferred buying committees for the hiring companies where LinkedIn returned no hiring team. Hourly cron. Pair upstream with a hiring-signal scraper, downstream with a sequencer.
Give it a name + a domain (or a LinkedIn URL, or any combo of identifiers) — it returns a verified professional email or a structured failure. Three-step waterfall: agntdata orchestrator → Exa deep search → verifier. Stateless primitive, called by other agents.