Use case

Add emails and phone numbers to a list of company websites

Turn a list of company websites into JSON with the emails, phone numbers and social links found on their pages, to enrich a prospect list. Pay per website.

Prepaid, no subscriptionREST or MCPOne key for models, data and agents
Weblovelyjsonitems[0]"website": "https://example-plumb…"emails": "info@example-plumbing…"phones": "+1 555 0100""linkedin": "linkedin.com/company/…"pages": 5

You have a list of companies, maybe from a directory or a map search, and all you have for each is a website. The contact details sit on a contact page, a footer or an about page, and opening them one by one takes minutes per company. Lovely Router crawls the sites for you. Send website links, get one JSON object per website with its contacts merged, pay per website from a prepaid balance. Call it from a script, your CRM import or an AI agent with one API key.

Hand it to your AI agent

Copy this prompt into Claude Code, Cursor, Codex or any coding agent. It tells the agent where the docs are and how to use your API key.

Add emails and phone numbers to a list of company websites. Use the Lovely Router data tools: each returns JSON and is billed per result.

- Docs (read first): https://lovelyrouter.com/docs/tools/find.md and https://lovelyrouter.com/docs/tools/run.md
- Plan first: POST https://lovelyrouter.com/v1/tools/suggest with `{"task": "<my task in plain words>"}` (free). It returns the tools to run in order, each with an example `input`, the `input_required` fields, an estimated cost and a ready-made `run` request. Replace the example values with my task's; if a field is unclear, read the tool with GET https://lovelyrouter.com/v1/tools/<id>. To browse instead, POST https://lovelyrouter.com/v1/tools/discover searches the catalog.
- Show me the plan and its estimated cost (`total_est_cost_usd`) before running anything large.
- Run: POST https://lovelyrouter.com/v1/tools/<id>/run with `{"input": {...}, "max_results": N}`. A 200 has the finished run with `items`; a 202 means it is still running, so poll the `poll` path until `status` is `succeeded`, `failed`, `timed_out` or `stopped`.
- Only delivered results are billed. Keep max_results small on the first run, check the output, then scale up.
- If you support MCP, connect https://lovelyrouter.com/mcp instead (Streamable HTTP, same key; https://lovelyrouter.com/docs/tools/mcp.md) and use suggest_tools, get_tool and run_tool.
- Auth: read my API key from the LOVELY_API_KEY environment variable and send it as `Authorization: Bearer $LOVELY_API_KEY`. Never print or commit the key. If it is not set, ask me to create one at https://lovelyrouter.com/app/keys.
- Billing is prepaid: every call is charged to my balance, so test with a small request before running anything large.
- Every docs page is plain Markdown; the full index is https://lovelyrouter.com/llms.txt.

My task: <the inputs (links, keywords or accounts) and how many results you need>
01

How it works

010203
  1. Collect the websites

    Gather the website links of the companies you want to reach: a directory export, a list from a map search, your own CRM.

  2. Run the tool with a cap

    Send the input to POST /v1/tools/website-contacts/run with max_results. Send the links in startUrls with max_results. The run holds its maximum cost from your balance and returns one object per website.

  3. Write back to your list

    Match each result to its company by website, save the emails, phones and social links, and verify the emails before you send.

02

Get contacts from websites with one request

Find emails and contacts on a website takes a list of start pages in startUrls. One website is one result: up to 5 of its pages are crawled and the contacts merged. maxDepth sets how many links away from the start page it may go, and sameDomain keeps it on the site:

curl https://lovelyrouter.com/v1/tools/website-contacts/run \
  -H "Authorization: Bearer $LOVELY_API_KEY" \
  -H "content-type: application/json" \
  -d '{
    "input": {
      "startUrls": [
        {
          "url": "https://example.com"
        }
      ],
      "maxDepth": 1
    },
    "max_results": 1
  }'

One run reads up to 50 websites; set max_results to the number of websites you send. A run still going after 60 seconds returns 202; Run a tool shows how to poll.

03

What each website holds

Field groupWhat you get
EmailsEmail addresses found on the site
Phone numbersPhone numbers found on the site
Social profilesLinks to the company's social profiles
MergeContacts from up to 5 crawled pages, merged into one result per website

The tool returns what the site publishes. If a site shows no email, there is nothing to return. You are responsible for using contact data lawfully, including privacy and anti-spam rules in the countries you contact.

04

Recipes

Enrich a map-search list

Take the websites from a Google Maps leads run, send them in startUrls, and add the emails and phones to the same rows.

Find the right inbox

Keep general addresses like info@ for a first note, and look for named ones before you write to a person.

Collect social links

Use the social profile links to find where a company is active before you choose a channel.

Clean a list before outreach

Run the emails through email-verify and drop the ones that bounce.

Check link-in-bio pages

Pass a linktr.ee page as a start URL and the tool reads every link on the profile for contact details.

Prefer plain words? Connect the MCP server and tell Claude Code or Cursor: "Read the 30 websites in companies.csv, find emails and phone numbers for each, and add them as columns. Set max_results to 30."

06

What you pay

You pay per website: starting a run holds its maximum cost, the per-call fee plus the per-website fee times max_results, and the run settles to what it returned. The rest of the hold goes back to your balance. A run that fails or times out pays only for the websites it delivered, and a run refused at the start costs nothing.

Enriching 200 websites is billed as 200 websites, whatever the number of pages crawled for each. There is no subscription and no monthly minimum: top up from $5, and one balance pays for tools and models. The card above shows today's price; pricing lists every tool.

07

Frequently asked questions

?
How many pages does it read per website?+

Up to 5 pages, with the contacts from all of them merged into one result.

Can I limit how far it follows links?+

Yes. maxDepth sets the number of links away from the start URL, and sameDomain keeps the crawl on the same domain.

How many websites can one run take?+

Up to 50.

Will it find an email for every company?+

No. It returns what the site publishes on the pages it crawls. Some sites list no email at all.

Is it legal to email what I find?+

That depends on where you and the recipient are. You are responsible for following privacy and anti-spam rules.

Do I need a subscription?+

No. You add credit to a prepaid balance and each run draws it down. Failed runs pay only for the results they delivered, and nothing renews automatically.

Planning a full prospecting flow? See lead generation, and the rest of the tool catalog.

One prepaid key for models, data and agents

No subscription. Top up, use what you need, see every charge in your logs.