How to Review AI Lead Enrichment and Outreach Drafts
The AI Lead Enrichment & Outreach Generator reads a lead file, fetches company website context, and generates selected outreach drafts. I maintain the Actor. It generates content; it does not send messages.
This walkthrough begins with the bundled three-company sample, then shows how to replace it with a small real lead file and review each result against the pages used as evidence.

Prepare the source and the offer separately
The no-upload starting point is inputSourceType: "csv_upload" with csvFile: "SAMPLE". That documented fixture contains three companies, Linear, Notion, and PostHog. Its lead names and generated examples are demonstration data, not a verified contact list.
For your own data, upload a CSV through the Console form. Default headers are website, company_name, first_name, and title; map differently named columns using the corresponding input fields. A Google Sheets source must be publicly accessible. Use a CSV instead when your lead list should remain private.
Write a value proposition that accurately describes your offer. Include only proof points you are entitled to use in sellerProofPoints; the sample form's customer logos and metrics are examples, not evidence about your business. Additional context columns are passed into the prompt, so include only relevant information.
Budget for the sample
Pricing as of September 6, 2026. On Free, GPT-4o mini costs $0.00399 per billed result; GPT-4.1 mini, GPT-4o, and GPT-4.1 cost $0.00699, $0.01699, and $0.01999. Gold rates are $0.00132, $0.00231, $0.00561, and $0.0066. One selected model event is charged per billed row. The Actor-start event is $0.00005 per GB of allocated memory, with a minimum of one event. Check current Actor pricing and the run charge breakdown; these calculations describe Actor events, and separately billed platform or proxy resources may also apply.
Try the bundled three-company sample
Open the Actor on Apify. In Input, switch to the JSON editor and paste:
{
"inputSourceType": "csv_upload",
"csvFile": "SAMPLE",
"maxRows": 3,
"sellerValueProposition": "We help B2B SaaS teams monitor public marketplace data for pricing and lead research.",
"openAiModel": "gpt-4o-mini",
"outputTypes": [
"icebreaker",
"email_subject",
"linkedin_opener"
],
"scrapeMode": "homepage_plus_about",
"tone": "professional",
"lengthPreference": "short",
"includeSourceUrls": true,
"sellerProofPoints": []
}
Click Start, then open the completed run’s output dataset.
The JSON requests three output types and uses homepage_plus_about scraping. homepage_only reads less context. smart_multi_page can fetch up to maxPagesPerCompany relevant pages, with an allowed maximum of ten. More pages may help with specific evidence but do not guarantee better copy.
After the run, inspect processing_status before reading the draft text. Separate successful, skipped, and failed rows. A generated sentence should not be treated as a verified fact just because the run completed.
Read the returned fields
| Field | How to use it |
|---|---|
company_summary | Summary based on fetched pages |
detected_signals | Rule-based signals |
signal_evidence | Text supporting detected signals |
scraped_urls | Pages used as evidence |
confidence_score | Fit score from 0 to 1 |
processing_status | Success, skipped, or failed status |
email_subject | Generated subject when requested |
scraped_urls tells you which pages were used. signal_evidence and detected_signals help explain the inferred company context, while personalization_reason explains the proposed angle. Keep those fields with the draft during review.
confidence_score is a fit heuristic, not proof that a person wants your product. The optional minFitScoreToCharge is a string containing a value from 0 to 1; rows below it are documented as skipped and not billed. Calibrate it after reviewing samples rather than assuming a universal cutoff.

Replace the fixture with ten real rows
Upload a CSV containing a small set of leads whose company websites you can verify. Map the column names explicitly and set maxRows to the number you intend to review. Confirm that a website column contains actual company URLs, not LinkedIn profile URLs or bare company names.
Keep includeSourceUrls and saveIntermediateFields enabled while evaluating the output. For each successful row, open the listed pages and check the factual premise of the icebreaker or opener. Reject unsupported claims about hiring, growth, recent events, customers, or product use.
Read the draft against your offer. Replace generic praise with a specific, relevant observation only when the evidence supports it. Remove fabricated familiarity and any implication that you already know the recipient's internal priorities. Check that the first name and company belong to the same original row.
Add review status, reviewer notes, and approved text in your own export. Retain the original generated fields for comparison. Failed and skipped rows should remain outside the approved send list rather than being replaced with blank personalization.
Export reviewed rows to CSV for your chosen downstream tool. Any sending step is a separate workflow with its own permissions and recipient controls. Keep the source URLs and generation date available so later edits or questions can be traced back to the evidence.
Diagnose bad copy before increasing volume
If company context is wrong, verify the website mapping and normalized_website. If pages could not be fetched, inspect status and log entries; a more expensive model cannot supply missing website evidence reliably.
If copy is vague despite usable pages, make the seller proposition more concrete or select a deeper scraping mode for a small test. If many rows are skipped, inspect the fit threshold and scores before lowering it. Compare outputs on the same reviewed rows when choosing a model so that lead quality does not confound the comparison.
If you need to identify people at target accounts first, the LinkedIn Decision Maker Finder guide explains how to review public profile matches before adding them to a lead file.
For processing lead files and reviewing generated results, see the Node.js example. Use the current input fields above if the example differs.
Frequently asked questions
Does the Actor send outreach messages?
No. It generates enrichment fields and selected outreach drafts. Sending is a separate workflow.
Can I test without uploading a CSV?
Yes. Set inputSourceType to csv_upload and csvFile to SAMPLE to use the documented three-company fixture.
Does confidence_score predict purchase intent?
No. It is a fit heuristic for reviewing results. Verify the evidence and draft text before using them.
