The MoltSets API is a JSON REST API where every tool (email lookup, mobile lookup, people search, company search and more) is a POST to https://api.moltsets.com/api/v1/tools/<tool_name> with a Bearer key that starts with ms_. Batch tools take up to 100 LinkedIn URLs or emails per call, misses come back as HTTP 200 with status: "not_found" at no record cost, and usage is capped by rolling 5-hour and weekly Fair Use windows rather than credits. If you are comfortable writing a few HTTP calls, it is one of the cheapest ways to get verified B2B emails into your own code.
Some tool links here are affiliate links (disclosure). You need an account to get a key: sign up for MoltSets (free tier, no card). For the product as a whole, including data claims and weaknesses, read our MoltSets review.
Nerdy Joe is a certified Apollo.io Managed Services Partner and a PlusVibe Certified Silver Partner, and we are a MoltSets affiliate. We did not call the MoltSets API for this guide. Everything below comes from MoltSets' API page, its developer docs (developer.moltsets.com) and its changelog, checked November 9, 2026, and request examples appear only in the shapes MoltSets documents.
MoltSets API quick facts
| Item | Detail (as of November 2026) |
|---|---|
| Base URL | https://api.moltsets.com/api/v1/tools/ |
| Method | POST with a JSON body, for every tool |
| Auth | Authorization: Bearer ms_XXXXXXXXXXX |
| Required headers | Content-Type: application/json and a non-empty User-Agent |
| Keys | Created under API keys in the app; you can create several |
| Batch size | Up to 100 linkedin_urls or emails per call |
| Response envelope | results, status, metadata |
| Miss | HTTP 200 with status "not_found", no record charged |
| Limit model | Rolling 5-hour and weekly record and request caps (Fair Use) |
| Shared limits | Per account, across every API key and connector |
| Free endpoints | get_account, get_billing, get_usage |
| SDKs | None ("No SDK to install") |
| Webhooks | None documented for API results |
Authentication and headers
Every call carries three headers. MoltSets' API page shows them in its curl example, and the docs explain the User-Agent rule.
Authorization: Bearer ms_XXXXXXXXXXX
Content-Type: application/json
User-Agent: my-app/1.0
Keys start with ms_ and are created under API keys in the MoltSets app. MoltSets suggests one per environment or agent, so you can revoke one without breaking the rest.
Since September 16, 2026, MoltSets returns 403 to connections without a non-empty User-Agent, per its changelog and docs. Some minimal HTTP clients and serverless runtimes send none by default, so set it explicitly.
The MCP server uses separate OAuth credentials (Client ID and Client Secret), not your ms_ key; see our MoltSets MCP server guide. The CLI uses the API key (--api-key, MOLTSETS_API_KEY or moltsets login). Limits are shared across every key and connector, so more keys do not mean more headroom.
The documented request example
This is the example on MoltSets' API page: find the best email for one LinkedIn profile.
curl -X POST https://api.moltsets.com/api/v1/tools/linkedin_to_best_email \
-H "Authorization: Bearer ms_XXXXXXXXXXX" \
-H "Content-Type: application/json" \
-H "User-Agent: my-app/1.0" \
-d '{"linkedin_url": "https://linkedin.com/in/example"}'
The documented response (trimmed by MoltSets itself with ...):
200 OK
{ "results": { "email": "sam@example.com", "type": "business", "risk_score": "A", ... },
"status": "ok", "metadata": { ... } }
Note the risk_score field: every returned email carries an A to F send-safety grade plus a last-validated date.
The response envelope and not_found
Every response uses the same envelope: results, status and metadata. The rule to build around is that a miss is not an error.
- Found: HTTP 200,
status: "ok", data inresults. - No match: HTTP 200,
status: "not_found". Nothing is charged against your record cap. - Batch calls: each item carries its own status, so one call can mix hits and misses.
- 404: only for an unknown tool (
tool_not_found), never for a miss.
MoltSets used to return 404 on misses. Its docs warn that Clay tables (and, by extension, any script) that relied on the old behavior must now check status instead of the HTTP code. If you wrote error handling that treats 404 as "no data," update it.
Failed email addresses never reach you. MoltSets says addresses that fail validation are dropped before delivery, and a lookup whose only address was dropped returns not_found with no charge.
Tool reference
REST and MCP share the same tool set. These are the tools listed on MoltSets' API page and in its docs index.
Enrichment tools
| Tool | What it returns | Batch | Notes |
|---|---|---|---|
| linkedin_to_best_email | Best work email, or personal if no work email | Up to 100 profiles | The documented example above |
| linkedin_to_business_email | Verified work email with A to F risk score and validation date | ||
| linkedin_to_personal_email_usa | US personal email | Old name without _usa deprecated October 19, 2026 | |
| linkedin_to_best_personal_email_usa | Best US personal email | Same deprecation note | |
| linkedin_to_mobile_phone | Carrier-verified mobile (no landlines or VoIP) | linkedin_urls up to 100 | Uses phone tokens, not plan records |
| reverse_email_lookup | Business profile from an email | Up to 100 emails | |
| reverse_linkedin_lookup | Full profile from a LinkedIn URL | Optional job history with include_experience | |
| email_to_linkedin | Highest-confidence LinkedIn URL for an email | ||
| ip_to_company | Company behind a visitor IP |
Personal email tools return US records only.
Search tools
| Tool | What it does | Charging note |
|---|---|---|
| search_people | Filtered people search | Records per returned result (see limits) |
| search_companies | Company search by name, domain, industry, employee count, revenue | |
| search_linkedin_profile | Profile search | count_only=true returns match counts without charging |
| search_business_email_by_name | Work email from name plus domain | |
| search_business_profile_by_name | Business profile from name | Charged only on a match |
Account tools (free)
get_account, get_billing and get_usage use no tokens and do not count against rate limits. get_usage accepts the periods today, week, month and billing_cycle, which makes it the right call before and during a large job.
Ad audience tools (plan-gated)
business_email_to_sha256, linkedin_to_sha256 (SHA256 and MD5) and email_to_maid (AAIDs and IDFAs) build ad audiences. Since September 29, 2026 they are available on Free, Solo ($27) and Pro ($97) but not on Team ($397) or Max ($997), per MoltSets' FAQ and changelog. A restricted plan gets plan_restricted (403).
Coming soon (not live)
validate_emails (up to 1,000 addresses per call) and scrape_website (homepage only, structured JSON) are documented and priced but do not work yet, with no launch date. Their planned prices are in our MoltSets pricing guide.
Batching: up to 100 per call
Batch tools take a linkedin_urls or emails array of up to 100 items, per MoltSets' docs. Three rules come with it:
- Each item counts as one request toward your Fair Use request cap. A batch of 100 is 100 requests, not one.
- You cannot mix single and batch parameters in one call (for example
linkedin_urlandlinkedin_urlstogether). - Read per-item status. The response carries a status per item, so loop through results rather than checking the top-level code alone.
For mobile batches, running out of phone tokens mid-batch does not fail the whole call. MoltSets says the batch returns what your tokens can cover and drops the rest, with insufficient_phone_tokens (402) once the balance is empty.
For one-off CSV jobs, the MoltSets CLI sends batches of 100 and resumes on rerun, which can be simpler than your own loop.
Search filters and pagination
search_people is the main list-building tool. These are the filters in MoltSets' API reference.
| Filter type | Fields |
|---|---|
| Free text and names | query, title, company, company_domain (max 100) |
| Location | country, state (Canadian province codes since October 16, 2026), city |
| Seniority | Intern, Entry, Senior, Manager, Director, VP, Head, C Suite, Owner, Partner |
| Company | industry (22 fixed buckets), employee_range (8 bands), revenue_range (7 bands), naics_code (prefix matching since October 22, 2026), linkedin_industry |
| Function | department or functional_area (12 values; use one or the other) |
| Exclusions | exclude_company_domain (max 100), exclude_country, exclude_state, exclude_industry, exclude_seniority, exclude_employee_range |
- Lists: positive filters accept lists since September 22, 2026.
- Exclusions need a positive filter. They cannot be the only filter in a call.
- Pagination:
offsetpluslimit;limitdefaults to 10 and maxes out at 25 per call. - Concurrency: 3 simultaneous searches on Free and Solo, 5 on Pro, 8 on Team and Max. Going over returns
search_concurrency_exceeded(429) with Retry-After: 1.
The docs we read do not state the maximum total results a search can page through, the full search_companies filter list, or whether one search record means one returned profile or one call (per profile is the likely reading).
Fair Use limits (what the API can actually do)
MoltSets plans are sold as "unlimited data," but every plan has rolling caps. These figures are from MoltSets' rate limits docs and Fair Use Policy, as of November 2026.
Enrichment caps
| Plan | Price | Records / 5 hours | Requests / 5 hours | Records / week |
|---|---|---|---|---|
| Free | $0 | 1,000 | 1,000 | 1,000 lifetime |
| Solo | $27/month | 1,000 | 5,000 | 5,000 |
| Pro | $97/month | 15,000 | 75,000 | 75,000 |
| Team | $397/month | 150,000 | 750,000 | 750,000 |
| Max | $997/month | 225,000 | 1,125,000 | 1,125,000 |
Search caps
| Plan | Records / 5 hours | Requests / 5 hours | Records / week | Concurrent searches |
|---|---|---|---|---|
| Free | 100 lifetime (10 per call max) | 100 lifetime | 100 lifetime | 3 |
| Solo | 500 | 2,500 | 2,500 | 3 |
| Pro | 7,500 | 37,500 | 37,500 | 5 |
| Team | 75,000 | 375,000 | 375,000 | 8 |
| Max | 112,500 | 562,500 | 562,500 | 8 |
How the counting works, per MoltSets:
- Records are deducted only when a real contact is returned.
- Requests are deducted whether or not a contact is returned. The request cap is 5x the record cap, so a list with a low match rate can hit the request cap first.
- Windows roll. Your first request opens a 5-hour window; weekly windows work the same way.
- The weekly cap binds first. On Solo you could do 1,000 records per 5 hours, but only 5,000 per week. The same 5x pattern holds on every paid plan.
- Personal emails count toward enrichment limits. On Team and Max they are also capped at 15,000 per 5 hours and 75,000 per week.
The Terms bar opening multiple self-serve accounts to get around limits, so plan your volume inside one account's caps. For more than Max allows, MoltSets sells custom flat files priced per record. Our in-depth MoltSets review weighs these caps against what competitors charge.
Error codes
Errors use {"error": {"code", "message"}}, and MoltSets says nothing is charged on an error.
| HTTP | Code | What to do |
|---|---|---|
| 401 | unauthorized | Check the key and the Bearer prefix |
| 402 | insufficient_tokens | Stop the job and check get_billing |
| 402 | insufficient_phone_tokens | Top up the phone token subscription; batch returns what it covered |
| 403 | account_inactive | Check the account and billing status |
| 403 | plan_restricted | The tool is not on your plan (for example ad audience tools on Team or Max) |
| 403 | (no code listed) | Missing User-Agent header, per the September 16, 2026 change |
| 404 | tool_not_found | Typo in the tool name, or a deprecated name |
| 422 | invalid_input | Fix the body (for example mixed single and batch params) |
| 429 | fair_use_limit_exceeded | Record cap reached for the window |
| 429 | fair_use_requests_exceeded | Request cap reached for the window |
| 429 | rate_limited | Too many calls too fast |
| 429 | search_concurrency_exceeded | Too many simultaneous searches; Retry-After: 1 |
| 500 | internal_error | Retry later with backoff |
Handling 429s in your code
MoltSets' CLI waits and retries up to four times on a 429, and waits for a Fair Use reset when a window is exhausted. Our recommendations for custom code follow the same idea.
- Split 429s by code. Concurrency and rate errors are short waits (respect Retry-After); the two fair_use codes can mean hours until the window rolls.
- Check headroom first with
get_usage(free). - Cap search workers at your plan's concurrency (3, 5 or 8).
- Treat 402 as a stop, not a retry loop.
What the API costs per record
These are our calculations from MoltSets' published prices, as of November 2026. The ceilings assume you use the full weekly enrichment cap every week (4 weeks per month).
| Plan | Price | Max enrichment records / month | Cost per record at full use |
|---|---|---|---|
| Solo | $27 | about 20,000 | about $0.00135 |
| Pro | $97 | about 300,000 | about $0.00032 |
| Team | $397 | about 3,000,000 | about $0.00013 |
| Max | $997 | about 4,500,000 | about $0.00022 |
Real cost is higher if you use less. A Solo user who enriches 2,000 contacts in a month still pays $27, about $0.0135 per record. Mobiles are a flat $0.15 per number returned, on a separate monthly phone token subscription that requires a paid plan.
For comparison, our Findymail API guide covers a credit-based API at about $0.0198 per found email on its Starter credit plan, with a bounce guarantee MoltSets does not offer.
Common MoltSets API use cases
Feed a cold email tool
MoltSets has no native integration with Instantly, Smartlead, PlusVibe or lemlist. Write the results to a CSV (or use the CLI's --out), then import it, or call the sequencer's own add-lead API from the same script. Our MoltSets to Instantly workflow walks through it, and our cold email infrastructure guide covers the sending side.
Call it from Clay
MoltSets is not a native Clay data provider.
Its docs show the setup: an HTTP API column, method POST, the tool URL, headers Content-Type, Authorization: Bearer and User-Agent: Clay, and "Response values to return" set to results. Then add Formula columns for nested fields (such as results.email, since Clay only traverses one level) and for status. Our Apollo vs Clay comparison covers where Clay fits in a stack.
Enrich inbound leads and CRM records
Use reverse_email_lookup on form fills and ip_to_company on site visitors. The CRM write-back (HubSpot, Attio, Salesforce) is done by your scripts or an agent, not a native sync product.
What the docs do not cover
- The contents of the OpenAPI spec at /openapi.json (referenced; not reviewed by us).
- Webhooks for async API results (none documented).
- A published accuracy percentage, database size or bounce guarantee.
MoltSets is also young: its changelog shows many changes to limits, tool names and responses in September and October 2026, so recheck the docs before each release.
Final take
The MoltSets API is simple to call: Bearer key, one POST per tool, batches of 100, and a clean ok versus not_found status that never charges you for a miss. The constraints to design around are the weekly Fair Use caps, the request cap that counts misses, 25 results per search call, and the required User-Agent header.
If your team works in code or agents rather than a dashboard, it is worth testing. Start with the free tier from a MoltSets account, run a few hundred lookups from your own list, then pick a MoltSets plan whose weekly cap fits.
For the bigger picture, including where MoltSets falls short, see the full MoltSets review, and if you need a UI as well, compare options in our best B2B data providers roundup. When you are ready, start on MoltSets.
Rather not build the list yourself?
Nerdy Joe is owned by Agency Growth Partners (AGP). AGP builds verified lead lists and runs outbound for agencies, including the enrichment scripts and grade filtering described here. If you would rather hand it off, book a call with David.
Sources
- MoltSets API page: https://moltsets.com/how-it-works/api/
- MoltSets developer docs index (llms.txt): https://developer.moltsets.com/llms.txt
- MoltSets API reference: https://developer.moltsets.com/api-reference/
- MoltSets rate limits: https://developer.moltsets.com/getting-started/rate-limits
- MoltSets email risk scores: https://developer.moltsets.com/moltsets-data/email-risk-scores
- MoltSets Clay integration docs: https://developer.moltsets.com/integrations/clay
- MoltSets validate emails reference: https://developer.moltsets.com/api-reference/get-valid-emails/validate-emails
- MoltSets scrape website reference: https://developer.moltsets.com/api-reference/get-company/scrape-website
- MoltSets Fair Use Policy: https://moltsets.com/fair-use-policy-enrichment/
- MoltSets pricing: https://moltsets.com/pricing/
- MoltSets mobile numbers pricing: https://moltsets.com/pricing/mobile-numbers/
- MoltSets FAQ: https://moltsets.com/faq/
- MoltSets features: https://moltsets.com/features/
- MoltSets CLI: https://moltsets.com/how-it-works/cli/
- MoltSets terms of service: https://moltsets.com/terms-of-service/
- MoltSets changelog: https://support.moltsets.com/en/articles/15424421-changelog
Frequently asked questions
Does MoltSets have an API?
Yes. MoltSets is API-first: every tool is a POST request to https://api.moltsets.com/api/v1/tools/ followed by the tool name, with a JSON body. The same tools are also exposed through its MCP server and CLI.
How do I authenticate with the MoltSets API?
Create an API key under API keys in the MoltSets app and send it as Authorization: Bearer followed by the key, which starts with ms_. MoltSets also requires a non-empty User-Agent header and Content-Type: application/json.
How many records can I send in one MoltSets API call?
Batch tools accept linkedin_urls or emails arrays of up to 100 items per call, per MoltSets' docs. Each item counts as one request against your Fair Use limits, and you cannot mix single and batch parameters in one call.
Is the MoltSets API really unlimited?
No. MoltSets says data is unlimited by volume, but every plan has rolling 5-hour and weekly caps on records and requests. On the $27 Solo plan that is 1,000 enrichment records per 5 hours and 5,000 per week, as of November 2026.
Does MoltSets charge for a lookup that finds nothing?
No. A miss returns HTTP 200 with status not_found and no record is deducted. It does count as one request toward the request cap, which is 5x the record cap on every plan.
Is there a MoltSets SDK?
MoltSets' API page says there is no SDK to install. You call the REST endpoints directly from any HTTP client, and the docs site references an OpenAPI spec at /openapi.json, which we did not review.