| name | sales-enrichso |
| description | Enrich.so platform help — real-time B2B datan enrichment API with 50+ data points per lookup and success-based billing. Key capabilities: reverse email lookup, LinkedIn profile enrichment, email/phone finders, company data, similar company search, employee search, IP to company, and bulk enrichment. Use when you have an email but need the LinkedIn profile behind it, a LinkedIn URL but need contact details, you need to find someone's email from just name and company, company data is missing for your leads, or the Enrich.so API isn't returning expected results. Do NOT use for cross-platform enrichment strategy (use /sales-enrich), email deliverability strategy (use /sales-deliverability), or prospect list strategy (use /sales-prospect-list). |
| argument-hint | [describe what you need help with in Enrich.so] |
| license | MIT |
| version | 1.0.0 |
| tags | ["sales","enrichment","linkedin","platform"] |
Enrich.so Platform Help
Help the user with Enrich.so platform questions — from Reverse Email Lookup and LinkedIn Profile Enrichment through Email/Phone Finders, Company Data, Similar Company Search, Employee Search, IP to Company, Job Listings, Bulk Enrichment, and Email Validation. Enrich.so is a real-time B2B datan enrichment API platform providing 50+ data points per lookup with a success-based credit model (only pay for verified results).
Step 1 — Gather context
If references/learnings.md exists, read it first for accumulated knowledge.
Ask the user:
-
What area of Enrich.so do you need help with?
- A) Reverse Email Lookup — find LinkedIn profile, job title, company, and 50+ data points from an email address
- B) LinkedIn Profile Enrichment — get full profile data from a LinkedIn URL (education, positions, skills, contact info, network info)
- C) Email Finder — find verified business email from name + company, or LinkedIn to Email
- D) Phone Number Finder — find phone numbers from profiles, Email to Phone, Mobile Finder
- E) Company Data Lookup — company details by name, domain, or LinkedIn URL (industry, size, revenue, tech stack, social profiles)
- F) Company Funding & Traffic — funding rounds, investors, amounts, web traffic estimates
- G) Search Similar Companies — find lookalike companies by LinkedIn URL with filters (location, employee size)
- H) Search Company Employees — find decision-makers by company and role with detailed profiles
- I) IP to Company — identify company from IP address (including remote workers)
- J) Job Listings — real-time company job postings search
- K) Bulk Enrichment — batch processing via CSV upload, JSON array, or CSV URL with webhook callbacks
- L) Email Validation / Disposable Email Check / Reverse Email Append
- M) Integrations / API — REST API, Zapier, n8n, Make, webhooks
- N) Account / Billing — plans, pricing, credits
- O) Something else — describe it
-
What's your role?
- A) Sales / SDR / BDR
- B) RevOps / Sales ops
- C) Developer / engineer
- D) Growth / marketing
- E) Recruiter / talent acquisition
- F) Other
-
What are you trying to accomplish? (describe your specific goal or question)
If the user's request already provides most of this context, skip directly to the relevant step. Lead with your best-effort answer using reasonable assumptions (stated explicitly), then ask only the most critical 1-2 clarifying questions at the end — don't gate your response behind gathering complete context.
Note: If the user needs a specialized skill, route them there with a brief explanation of why that skill is a better fit.
Step 2 — Route or answer directly
If the request maps to a specialized skill, route:
- Cross-platform enrichment strategy / multi-tool enrichment ->
/sales-enrich
- Email deliverability / verification strategy (not Enrich.so-specific) ->
/sales-deliverability
- Prospect list building strategy ->
/sales-prospect-list
- Connecting Enrich.so to other tools via middleware ->
/sales-integration
- Apollo.io-specific questions ->
/sales-apollo
- ZoomInfo-specific questions ->
/sales-zoominfo
- Clearbit-specific questions ->
/sales-clearbit
Otherwise, answer directly from platform knowledge using the reference below.
Step 3 — Enrich.so platform reference
Read references/platform-guide.md for detailed module documentation, pricing, integrations, and data model.
You no longer need the platform guide details — focus on the user's specific situation.
Step 4 — Actionable guidance
Based on the user's specific question:
-
Enriching a list of email contacts with LinkedIn data:
- Prepare your list as a CSV with an
email column
- Use the Bulk Enrichment endpoint:
POST /v1/api/bulk-enrichment with type person and upload your CSV (or pass a JSON array or CSV URL)
- Include
webhookUrl in the request body to receive a callback when processing completes — avoids polling
- Retrieve results:
GET /v1/api/bulk-enrichment-results?uid=<uid> using the uid returned from the submit call
- Results include LinkedIn URL, job title, company, location, and 50+ data points for each matched email
- Import enriched data back into your CRM — map fields to your CRM's contact properties
- Only successfully enriched records consume credits — no charge for unmatched emails
-
Finding decision-maker emails at target accounts:
- Start with your target company's LinkedIn URL or domain
- Use Search Company Employees to find people by role: filter for titles like "VP Sales", "Head of Engineering", "CTO"
- For each matching employee, use LinkedIn to Email to get their business email address
- Validate each email with the Email Validation endpoint before outreach — check for catch-all domains and invalid mailboxes
- Optionally use the Phone Number Finder to add phone touchpoints for multi-channel sequences
- For large account lists, use Bulk Enrichment with type
find-email to process in batch
-
De-anonymizing website visitors with IP to Company:
- Capture visitor IP addresses from your web server logs or analytics platform
- Call
GET /v1/api/ip-to-company-lookup with each IP address (param ip)
- Enrich.so returns the associated company name, domain, industry, size, and LinkedIn URL — works for remote workers too
- Match returned companies against your ICP criteria (industry, size, revenue) to prioritize follow-up
- Use Company Data Lookup to get full firmographic details on high-priority matches
- Use Search Company Employees to find the right contact at each identified company
- Automate the pipeline with Zapier (IP to Company trigger) or your integration platform of choice
-
Building a lookalike company list:
- Identify your best customers' LinkedIn company URLs
- Call with each URL — optionally filter by location and employee size to match your ICP
Gotchas
Best-effort from research — review these, especially items about plan-gated features and integration gotchas that may be outdated.
- Success-based billing means no charge for misses, but credit costs vary by endpoint — check the pricing page for per-endpoint credit costs before budgeting. A person enrichment lookup may cost a different number of credits than a company lookup or phone finder. Plan your credit allocation based on the mix of endpoints you use, not just the total number of lookups.
- Bulk enrichment is async — you must poll for results or use webhooks. Submitting a bulk job returns a
uid immediately, but results are not available in the response. You need to either poll GET /v1/api/bulk-enrichment-results?uid=<uid> until the job completes or include a webhookUrl in your request to get notified. Jobs with large datasets can take minutes to hours depending on size.
- LinkedIn profile enrichment depends on LinkedIn URL format — use the canonical profile URL. Pass the full
https://www.linkedin.com/in/username format. Shortened URLs, Sales Navigator URLs, or URLs with query parameters may not resolve correctly. Strip tracking parameters before calling the API.
- IP to Company accuracy varies — shared IPs, VPNs, and cloud providers will not resolve to a specific company. The endpoint works best with corporate IP ranges and ISP-to-company mapping for remote workers, but visitors using VPNs, shared office spaces, or cloud-based browsing will return inaccurate or no results. Expect a match rate below 100% and validate high-priority matches.
- Zapier integration is limited to specific triggers/actions (reverse email lookup, IP to company) — for other endpoints, use the REST API directly or a custom Zapier webhook step. Not all Enrich.so endpoints have native Zapier triggers/actions. For endpoints like Similar Companies, Employee Search, or Bulk Enrichment, you will need to use Zapier's webhook action or connect via n8n/Make with HTTP request nodes.
- Self-improving: If you discover something not covered here, append it to
references/learnings.md with today's date.
Step 5 — Related skills
/sales-enrich — Cross-platform datan enrichment strategy (multi-tool enrichment workflows, waterfall enrichment)
/sales-deliverability — Email deliverability and verification strategy (SPF/DKIM/DMARC, warmup, inbox placement)
/sales-prospect-list — Prospect list building strategy and best practices
/sales-integration — Connect Enrich.so to CRM, automation tools, or other platforms
/sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-do
Examples
Example 1: Enriching CRM contacts with LinkedIn and company data
User says: "I have 500 contacts in my CRM with just email addresses. I want to add LinkedIn profiles, job titles, and company info to each one."
Skill does:
- Recommends exporting contacts as a CSV with an
email column
- Uses Bulk Enrichment (
POST /v1/api/bulk-enrichment) with type person and the CSV upload — explains the async workflow and webhook callback option
- Retrieves results with
GET /v1/api/bulk-enrichment-results?uid=<uid> once the job completes
- Maps returned fields (linkedin_url, job_title, company_name, company_domain, location) to the user's CRM contact properties
- Explains that only successfully matched contacts consume credits — unmatched emails cost nothing
- Recommends running Company Data Lookup on unique company domains from the results to add firmographic data (industry, size, revenue) at the account level
Result: User has 500 contacts enriched with LinkedIn profiles, job titles, and company details — ready for segmentation and personalized outreach
Example 2: Finding and validating decision-maker emails at target accounts
User says: "I need to find the VP of Engineering's email at 20 target companies for an outbound campaign."
Skill does:
- Collects the 20 company LinkedIn URLs or domains from the user
- Uses Search Company Employees for each company, filtering by title containing "VP" and department "Engineering"
- For each matched employee, uses LinkedIn to Email to find their business email address
- Validates each email with the Email Validation endpoint — flags catch-all domains, invalid mailboxes, and role-based addresses
- Optionally uses Phone Number Finder to add direct dial numbers for multi-channel outreach
- Delivers a clean list of 20 verified decision-maker contacts with email, phone, LinkedIn URL, and title
Result: User has a validated, enriched contact list of engineering VPs ready for personalized outbound sequences
Example 3: Identifying high-intent website visitors and routing to sales
User says: "We get 10K website visitors a month but don't know who they are. Can Enrich.so help us identify companies visiting our site?"
Skill does:
- Explains the IP to Company endpoint — capture visitor IPs from web server logs or analytics, then call the API to identify the company behind each IP
- Sets up an automated pipeline: visitor IP -> IP to Company API -> filter by ICP criteria (industry, employee count, revenue) -> alert sales team
- Recommends using Zapier's IP to Company integration for a no-code setup, or a custom webhook for real-time processing
- For matched companies, chains Company Data Lookup for full firmographics and Search Company Employees to find the right buyer persona
- Cautions that VPN users, shared IPs, and cloud provider IPs will not resolve — expect 20-40% company match rate depending on traffic mix
- Suggests combining with job listing signals (companies hiring for roles your product supports) to prioritize outreach
Result: User has an automated visitor identification pipeline that surfaces high-intent companies visiting their site and routes enriched leads to the sales team
Troubleshooting
Bulk enrichment job stuck or returning incomplete results
Symptom: A bulk enrichment job submitted via POST /v1/api/bulk-enrichment returns a uid, but polling GET /v1/api/bulk-enrichment-results shows the job as still processing after an extended period, or results are missing rows.
Cause: Large bulk jobs take time to process — the async nature means results are not instant. Incomplete results can occur if the input file has formatting issues (malformed CSV, missing required columns, encoding problems) or if some rows contain invalid data that cannot be processed.
Solution: First, check that your input file is valid — CSV should be UTF-8 encoded with the correct column headers for the enrichment type (e.g., email for person enrichment, linkedin_url for LinkedIn enrichment). If the job is still processing, continue polling or wait for the webhook callback — large jobs (10K+ rows) can take 30 minutes to several hours. If results are missing rows, check the job status for error counts — some rows may have failed individually. Re-submit failed rows in a separate batch. If the job appears permanently stuck, contact Enrich.so support with the job uid.
Reverse email lookup returning no results for valid emails
Symptom: Calling the Reverse Email Lookup endpoint with a known valid business email returns no match (HTTP 404 or empty result), even though the person has a LinkedIn profile.
Cause: Enrich.so's reverse email lookup depends on the email being associated with a LinkedIn profile or other indexed data sources. If the person uses a different email on LinkedIn, has a private profile, or the email-to-profile mapping has not been indexed, no match will be returned. Free email providers (Gmail, Yahoo) have lower match rates than business domains.
Solution: Verify the email is spelled correctly and is the person's primary business email. If using a free provider email, try the person's work email instead — business domains have significantly higher match rates. As an alternative path, if you know the person's name and company, use the Email Finder endpoint to find their business email, then try the reverse lookup with that address. If you have their LinkedIn URL, use LinkedIn Profile Enrichment directly instead of the reverse lookup.
API returning 401 Unauthorized despite valid token
Symptom: API requests return HTTP 401 even though the API token appears correct in the dashboard. (Note: the reverse email lookup endpoint is GET /v1/api/person, not /v1/api/reverse-email-lookup.)
Cause: Common causes include: the token has leading/trailing whitespace when copied, the Authorization header format is wrong (must be Bearer <token>, not Basic or just the token), the token was regenerated and the old one is being used, or the account has been suspended due to billing issues.
Solution: Copy the token fresh from the Enrich.so dashboard — watch for trailing spaces or newline characters. Verify the header format is exactly Authorization: Bearer <token> with a single space after "Bearer". Check that you are using the current active token (regenerating a token invalidates the previous one). Verify your account is in good standing — check for billing alerts or suspension notices in the dashboard. Test with a simple cURL command to isolate whether the issue is in your code or the token itself: curl -H "Authorization: Bearer <token>" "https://api.enrich.so/v1/api/person?email=test@example.com".