richapi
RichAPI is a live B2B GTM data API.
What it can do
- Ai Enrich: Run an LLM completion against the configured AI provider (OpenAI, Anthropic, Gemini, or Perplexity). Used for classification, extraction, summarization, etc. Example input: {"output_schema"
- Clean Domain: Local utility endpoint. Example input: {"messy_url":"https://www.acme.com/about?ref=google"} Next steps: Returns domain. Feed into email_finder, company_enricher, or web_scrape.
- Count Occurrences: Local utility endpoint. Example input: {"input":"hello world hello","separator":"hello"}
What data it sees
Do you need an account
No: the server works without sign-in
RichAPI is a live B2B GTM data API. One key, roughly 70 endpoints: people search and enrichment, company enrichment, email finding and verification, phone finding, web and ad intelligence. Four endpoints run a provider waterfall - email finder, phone finder, email verifier, company enricher - and return an execution_log. On those four, a miss costs zero credits (billed: false). Other endpoints bill on a 2xx result. Credits are $0.02 each, prepaid. No seats, no subscription, no contract. 25 free credits at signup, no card. Hosted MCP, Python and TypeScript SDKs, Postman.
How to connect
How to connect richapi to Claude
The server address to paste into Claude settings:
https://richapi--accounts-lx54.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect richapi to ChatGPT
The server address to paste into ChatGPT settings:
https://richapi--accounts-lx54.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect richapi to Cursor
The server address to paste into Cursor settings:
https://richapi--accounts-lx54.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (60)
Raw names from tools/list. Only developers need these.
| ai_enrich | Run an LLM completion against the configured AI provider (OpenAI, Anthropic, Gemini, or Perplexity). Used for classification, extraction, summarization, etc. Example input: {"output_schema":{"properties":{"reason":{"type":"string"},"score":{"type":"number"}},"required":["score","reason"],"type":"object"},"output_type":"json","prompt":"Jane Smith — VP Sales at Acme — logistics SaaS, 200 employees","provider":"openai","system_prompt":"You are a B2B lead scorer. Return JSON matching the schema."} Next steps: Returns {result: <text or parsed JSON>}. When output_type='json', the response is already parsed — no extra parsing needed. |
| clean_domain | Local utility endpoint. Example input: {"messy_url":"https://www.acme.com/about?ref=google"} Next steps: Returns domain. Feed into email_finder, company_enricher, or web_scrape. |
| count_occurrences | Local utility endpoint. Example input: {"input":"hello world hello","separator":"hello"} |
| crunchbase_company_scraper_sync | API endpoint: crunchbase_company_scraper_sync Example input: {"crunchbase_company_url":"https://microsoft.com"} |
| directory_yellowpages | Search Yellow Pages for local businesses by category and location. 1 credit per call. Good for SMB lead generation in the US. Example input: {"location":"Austin, TX","query":"plumbers"} Next steps: Returns business records with {name, phone, address, website}. |
| distribute_leads | Local utility endpoint. Example input: {"assignment_labels":"Team A,Team B,Team C","current_index":0,"values_associated_with_labels":"alice@co.com,bob@co.com,carol@co.com"} |
| email_finder | Find a professional email address from a person's name and company domain (or LinkedIn URL). Returns the first match found across multiple providers. Example input: {"domain":"microsoft.com","first_name":"Satya","last_name":"Nadella"} Next steps: Returns result.email on success. On failure try people_search to get a LinkedIn URL first. |
| email_verifier | Verify whether an email address is deliverable. Returns SMTP/MX validation status, disposable/webmail flags, and a confidence score. Example input: {"email":"satya@microsoft.com"} Next steps: Returns result.status: valid=deliverable, risky=grey-list, invalid=bounce. Never retries — change input if invalid. |
| encode_uri | Local utility endpoint. Example input: {"value":"hello world & foo=bar"} |
| enrich_companies_bulk | Bulk-enrich up to 50 LinkedIn companies in a single call by numeric company ID. 1 credit per RESULT returned. Example input: {"urns":["1586","1587"]} Next steps: Returns an array of company records. For single companies use enrich_company with the full linkedin.com/company/<slug> URL. |
| enrich_company | Enrich a LinkedIn company page URL with firmographic data: industry, employee count, HQ, founded year, specialties, website domain, and follower count. Cached ~24h by default. Example input: {"url":"https://www.linkedin.com/company/microsoft/"} Next steps: Returns {name, industry, employee_count, website, domain, ...}. The `domain` field is the canonical company domain — feed it into email_finder, people_search, or company_enricher. |
| enrich_profile | Enrich a LinkedIn profile URL and return structured personal data: full name, headline, current role, company, location, industry, skills, education, and the LinkedIn URN needed for profile_activities. Cached ~24h by default (set useCache=false for fresh data). Base price is 1 credits per call. When `include_social_metrics` is `True`, the optional component adds 1 credits; it is not charged when unavailable. Example input: {"url":"https://www.linkedin.com/in/satyanadella/"} Next steps: Returns {entityUrn, firstname, lastname, company.name, company.website, headline, ...}. Feed entityUrn into profile_activities for the person's posts/comments/reactions, or pipe firstname/lastname + company.website into email_finder. |
| enrich_profiles_bulk | Bulk-enrich up to 50 LinkedIn profiles in a single call by entityUrn. 1 credit per RESULT returned, not per call — cheaper than calling enrich_profile in a loop when you have ≥10 URNs already. Example input: {"urns":["ACoAAAGhXV8B9jFBu7w3NLhsepBqpzJ1FdGgkuA"]} Next steps: Returns an array of profile records. Missing URNs are silently skipped — diff the input and output to detect misses. Use enrich_profile for single lookups under ~5 URNs. |
| extract_urls_emails | Local utility endpoint. Example input: {"text":"Contact us at sales@acme.com or visit https://acme.com"} |
| find_linkedin_url_by_email | Find a LinkedIn profile URL from a person's email address. 1 credit per result. Example input: {"email":"satya@microsoft.com"} Next steps: Returns linkedinUrl. Feed it into enrich_profile or email_finder. |
| find_linkedin_url_by_name | Find a LinkedIn profile URL from a person's name and company. 1 credit per result. Example input: {"company_name":"Microsoft","full_name":"Satya Nadella"} Next steps: Returns linkedinUrl. Feed it into enrich_profile. |
| find_personal_email | Find a personal (non-work) email for a person using their LinkedIn URL. 2 credits per result. Example input: {"linkedin_url":"https://linkedin.com/in/satyanadella"} |
| find_redirect | Local utility endpoint. Example input: {"link":"https://bit.ly/example"} Next steps: Returns final_url. Useful for resolving tracking/shortened links before scraping. |
| find_sitemap_urls | Local utility endpoint. Example input: {"domain":"stripe.com","keywords":"pricing"} |
| find_website_by_company_name | Find a company's website domain from its name. 1 credit per call. Example input: {"company_name":"Microsoft"} Next steps: Returns domain. Feed it into email_finder or company_enricher. |
| format_datetime | Local utility endpoint. Example input: {"date":"2026-04-11T14:30:00Z","format":"%B %d, %Y","new_timezone":"America/New_York"} |
| geo_id_search | Resolve a location name to a LinkedIn Geo ID for use in profile_search and linkedin_job_search. 1 credit per call. Example input: {"search":"San Francisco Bay Area"} Next steps: Returns geoId — pass it into profile_search.geoId or linkedin_job_search.geoId for precise location filtering. |
| google_ad_transparency_scraper_sync | API endpoint: google_ad_transparency_scraper_sync Example input: {"google_ad_url":"https://microsoft.com","limit":""} |
| google_maps_places_scraper_keyword | API endpoint: google_maps_places_scraper_keyword Example input: {"search_query":"example","limit":""} |
| google_maps_places_scraper_sync_using_url | API endpoint: google_maps_places_scraper_sync_using_url Example input: {"google_map_search_url":"https://microsoft.com","limit":""} |
| google_maps_reviews_scraper_sync | API endpoint: google_maps_reviews_scraper_sync Example input: {"google_map_review_url":"https://microsoft.com","limit":""} |
| google_search_scraper_sync | API endpoint: google_search_scraper_sync Example input: {"search_query":"example"} |
| identify_email_type | Local utility endpoint. Example input: {"email":"satya@microsoft.com"} |
| lead_search | Search LinkedIn leads (people) using seniority, title, function, industry, geography, and company filters. Costs 10 + (0.5 * returned results) credits. Example input: {"locations":["United States"],"seniority":["Senior","Director"],"page":1} Next steps: Feed results into email_finder or enrich_profile for contact data. |
| linkedin_ad_details | Fetch full details of a specific LinkedIn ad by URL. 1 credit per call. Example input: {"url":"https://www.linkedin.com/ad-library/detail/123456789"} |
| linkedin_ad_search | Search LinkedIn ads by keyword, advertiser, or objective. Returns ad metadata. 2 credits per call. Example input: {"countries":"US","dateOption":"last-30-days","keyword":"marketing automation"} |
| linkedin_company_employees_search | Search employees of a specific LinkedIn company. 0.1 credits per result. Example input: {"company_linkedin_url":"https://linkedin.com/company/microsoft","title":"Engineer"} Next steps: Returns employee profiles. Feed linkedin_url into enrich_profile for full data. |
| linkedin_company_posts | API endpoint: linkedin_company_posts Example input: {"page":"","linkedin_company_url":"","linkedin_company_id":""} |
| linkedin_company_search | API endpoint: linkedin_company_search Example input: {"page":"","search_query":"","location":""} |
| linkedin_job_detail | Fetch full details of a LinkedIn job posting by URL. 1 credit per call. Example input: {"url":"https://linkedin.com/jobs/view/1234567890"} |
| linkedin_job_search | Search LinkedIn job postings by title, company, location, job type, and experience level. 1 credit per call. Example input: {"location":"San Francisco","title":"Software Engineer"} Next steps: Returns job listings. Feed job URLs into linkedin_job_detail for full description. |
| meta_ads_library_scraper_sync | API endpoint: meta_ads_library_scraper_sync Example input: {"meta_ad_url":"https://microsoft.com"} |
| normalize_company | Local utility endpoint. Example input: {"company_name":"ACME TECHNOLOGIES, INC."} |
| normalize_list | Local utility endpoint. Example input: {"input":"apple, Banana, apple, , cherry","remove_empty_values":true} |
| normalize_phone | Local utility endpoint. Example input: {"country_code":"US","phone_number":"(415) 555-1234"} |
| people_search | Search 700M+ indexed LinkedIn profiles by job title, seniority, industry, company, or location. Returns a paginated list of profile previews. 0.1 credits per result returned. Example input: {"account":{"industry":["software development"]},"contact":{"jobTitle":["founder"],"location":["united states"]},"page":0,"size":10} Next steps: Feed linkedin_url values into enrich_profile for fuller records, or into email_finder with the company domain. |
| phone_finder | Find a mobile phone number from a LinkedIn profile URL. Returns the first match found across multiple providers. Example input: {"linkedin_url":"https://www.linkedin.com/in/satyanadella/"} Next steps: Returns result.phone. Soft-fail means no mobile on file — do not retry with same inputs. |
| post_activities | Return the engagement stream (comments or reactions) for a specific LinkedIn post by URN. 3 credits per call. Use this to build a prospect list of people who engaged with a post. Example input: {"urn":"urn:li:activity:7458532524865232896"} Next steps: Returns same structure as post_details: {urn, commentary, actor, numComments, numReactions, reactionType, shareUrl, comments[], reactions[], content, sponsored}. |
| post_details | Fetch the full content of a LinkedIn post by URN or URL: post text, author profile, reaction counts by type, and optionally comments and reactions lists. 1 credit per call. Example input: {"comments":true,"urn":"urn:li:activity:7458532524865232896"} Next steps: Returns {urn, commentary, actor, numComments, numReactions, reactionType, shareUrl, comments[], reactions[], content, sponsored}. Feed the urn into post_activities for the full engagement stream. Actor fields: profileId, firstName, lastName, headline, profilePicture. |
| post_keyword_search | Search recent LinkedIn posts by keyword. Returns post URLs, authors, engagement counts, and snippets. 6 credits per call (not per result). Use for topic monitoring and lead-intent signals. Example input: {"datePosted":"PAST_WEEK","keyword":"AI agents","sort":"DATE_POSTED"} Next steps: Returns {results: [{url, author, snippet, likes, comments, ...}]}. Feed post URLs into post_details for the full body, or into post_activities to harvest commenters. |
| predict_gender | Local utility endpoint. Example input: {"name":"Jordan"} |
| profile_activities | Return recent activity (posts, comments, or reactions) for a LinkedIn profile by URN. Use with the URN from enrich_profile. 2 credits per call. Example input: {"type":"POST","urn":"ACoAAAGhXV8B..."} Next steps: Returns recent activity items. Chain post_details on any item url for the full post body, or post_activities to harvest that post's own commenters. |
| profile_search | Live LinkedIn profile search by name, title, current company, or keywords. Lower latency but smaller filter surface than people_search. 0.1 credits per result. Example input: {"currentCompany":"Microsoft","search":"Satya Nadella"} Next steps: Returns a list of profile hits. When multiple people share a name, always pass currentCompany to disambiguate — otherwise take the top hit at your own risk. |
| profile_social_metrics | API endpoint: profile_social_metrics Example input: {"url":"https://microsoft.com"} |
| remove_whitespace | Local utility endpoint. Example input: {"input_text":" hello world "} |
| search_bing | Run a Bing web search and return the SERP. 1 credit per call. Example input: {"num_results":10,"query":"site:linkedin.com/company microsoft"} Next steps: Returns {results: [{title, url, snippet}]}. Use with site: operators to find LinkedIn company pages, sitemap discoveries, etc. |
| search_google_trends | Get Google Trends interest-over-time data for a keyword in a given geography. 1 credit per call. Use for intent signals and seasonality analysis. Example input: {"geo":"US","keyword":"AI agents","timeframe":"today 12-m"} Next steps: Returns a time-series of normalised search interest (0-100). |
| search_reference_data | Returns all valid filter labels for lead_search. Use this to discover valid values for seniority, industries, job functions, company sizes, years of experience, and profile languages. COST: Free (0 credits). RESPONSE: { seniority: [...], industries: [...], functions: [...], yearsOfExperience: [...], companySize: [...], profileLanguages: {...} } WHEN TO USE: Before building a lead_search query, call this to see all available filter options so you use exact valid labels. |
| similarweb_scraper_sync | API endpoint: similarweb_scraper_sync Example input: {"domain":"microsoft.com"} |
| slack_channel_members | Extract Slack channel members with names, emails, titles, timezones, and admin status. Requires Slack session cookie. 2 credits per call. Example input: {"channel_id":"C0123456789","cookie":"xoxd-...","token":"xoxc-...","workspace":"acme"} Next steps: Returns members list. Feed emails into email_verifier, or names into find_linkedin_url_by_name. |
| web_emails | Crawl a domain for email addresses across multiple pages. 3 credits per call. Use when you need generic contact emails (sales@, support@) — NOT for finding a specific person's email (use email_finder for that). Example input: {"max_pages":10,"url":"https://microsoft.com"} Next steps: Returns a de-duplicated list of emails with the page each was found on. |
| web_json_ld | Extract JSON-LD structured data blocks from a page. 1 credit per call. Example input: {"url":"https://microsoft.com"} Next steps: Returns the @graph array of structured entities. Useful for product/organization/article schemas. |
| web_meta_tags | Extract OpenGraph, Twitter Card, and SEO meta tags from a URL. 1 credit per call. Cached by default. Example input: {"url":"https://microsoft.com"} Next steps: Returns {title, description, og:image, twitter:card, ...}. |
| web_pixels | Detect tracking pixels and analytics tags on a page (GA, GTM, Facebook Pixel, LinkedIn Insight, HubSpot, etc.). 1 credit per call. Useful for competitor analysis. Example input: {"url":"https://microsoft.com"} Next steps: Returns a list of detected tracking/analytics tags with their IDs where available. |
| web_scrape | Fetch the full HTML of a page, optionally also rendering Markdown. 2 credits per call. Use for contextual grounding before summarisation. Example input: {"formats":["markdown"],"url":"https://microsoft.com"} Next steps: Returns {html, markdown}. Pipe markdown into ai_enrich for summarisation. |