Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Enrich Less Annoying CRM (5 Tools, With Real Requests)

Less Annoying CRM has no enrichment built in. Here are five ways to fill its blank emails, phones and titles, each with the request you run and what it costs.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

Less Annoying CRM does not enrich contacts itself, so you bring the data in from outside. Its integrations page lists categories such as calendar, contacts and email marketing, and none is enrichment (LACRM, September 2026). This guide shows five routes, from a CSV to an AI assistant, using the LeadOcean API.

TL;DR

  • Pick one route. A CSV import is the fastest for a one-off list. A script or Zapier suits new contacts as they arrive.
  • Each route takes 20 to 40 minutes to set up and runs on the Free plan: 1,000 records for life, no card.
  • Testing spends roughly 25 to 100 records. A count, a 404 and an enrichment that finds nothing cost nothing.

Prerequisites

  • A Less Annoying CRM account. It is one flat price: $15 per user per month plus tax, with a 30-day free trial (LACRM pricing, October 2026).
  • A LeadOcean API key from app.leadocean.io/register, exported as $LEADOCEAN_API_KEY.
  • curl and Python 3 for the script route. Zapier or n8n for the automation routes.
  • Placeholder data only below: Acme, acme.com, Jane Doe.

Which route fits

Pick by how your contacts arrive, not by taste. The table shows the fit and the plan each route needs.

RouteBest forPlan needed
Exports page and CSVA one-off list of new prospectsSolo or Agency (bulk CSV is not on Free)
Script over the APIContacts that arrive by form or by handFree
ZapierA steady trickle of new contacts, no codeFree key, any Zapier plan
n8nYour own server, your own logicFree
AI assistant over MCPAd hoc lookups and list sizingFree

Most small teams need two routes. Use the CSV for the first big list, then Zapier or a script to keep new contacts filled.

Step 1: Size your list before you spend anything

Count first. The MCP tool leadocean_count_leads and the count=true search call are free, so you know the size of a list before you pull it.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true&limit=1" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"title": ["Operations Manager"], "country": ["US"]}'

The reply has data empty, meta.countOnly true and a meta.total, which is capped at 100,000. Add filters until the total is a list you would actually work. Enum values are exact strings, so check them with leadocean_list_enum_values first.

Step 2: Tool 1, the Exports page and a CSV import

For a one-off list, use the LeadOcean app. Open the Exports page at app.leadocean.io, build the filters, pick columns and read the record price before you start. Then press Download.

Bulk CSV export is not on Free. It is included on Solo ($97 a month) and on Agency ($497 a month, 50k rows a file). On Free, use the API in Step 3.

Pick these columns so the CSV maps cleanly into a CRM: name, title, company, email_1_address, email_1_status, phone_1_number. Filter on email_1_status before you import, because there is no refund for bounced emails.

Then import the file with the Less Annoying CRM importing tool. It maps spreadsheet columns to contact and company fields and takes Excel or CSV files (LACRM help, October 2026).

Step 3: Tool 2, a script that fills contacts through the API

A script suits you when contacts arrive by form or by hand and you want the blanks filled the same day. Enrich takes exactly one of linkedin_url, email, phone or person_id.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/enrich" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"email": "jane.doe@acme.com", "reveal_email": true}'

A person we hold nothing for returns 404 and costs nothing. A hit costs one record. Wrap the call in Python.

python
import os, requests

LO = {"x-api-key": os.environ["LEADOCEAN_API_KEY"]}

def enrich(email):
    r = requests.post("https://api.leadocean.io/v1/people/enrich",
                      headers=LO, json={"email": email, "reveal_email": True})
    if r.status_code == 404:
        return None  # free miss, leave the contact alone
    r.raise_for_status()
    return r.json()

person = enrich("jane.doe@acme.com")
print(person)  # next: write the fields you want to the CRM

The last step is a call to the Less Annoying CRM API. It takes a POST to https://api.lessannoyingcrm.com/v2/ with your LACRM key in the Authorization header and a JSON body naming the function (LACRM API docs, October 2026). EditContact takes a ContactId plus fields such as Phone.

python
def lacrm(function, params):
    r = requests.post("https://api.lessannoyingcrm.com/v2/",
                      headers={"Authorization": os.environ["LACRM_API_KEY"]},
                      json={"Function": function, "Parameters": params})
    r.raise_for_status()
    return r.json()

phones = person["data"]["contact_data"].get("contact_phones", []) if person else []
if phones:
    lacrm("EditContact", {"ContactId": "<contact id>",
                          "Phone": [{"Text": phones[0]["phone"], "Type": "Work"}]})

Step 4: Tool 3, Zapier

Zapier fits a trickle of new contacts. Less Annoying CRM has a Zapier integration, and Zapier lists contact triggers and actions for it (LACRM, September 2026).

Use Webhooks by Zapier with the Custom Request event to call LeadOcean. Zapier lists Webhooks by Zapier on every plan, Free included (Zapier help, October 2026). Set these fields:

text
Method:  POST
URL:     https://api.leadocean.io/v1/people/enrich
Headers: x-api-key: <your key>
         content-type: application/json
Data:    {"email": "{{contact_email}}", "reveal_email": true}

Add a Less Annoying CRM update step after it and map the response fields into the contact. The full recipe, with field mapping, is in LeadOcean + Zapier. Add a Filter step so empty emails never reach the call.

Step 5: Tool 4, n8n

n8n suits you if you want the key and the logic on your own server. Use an HTTP Request node with the same POST and the same x-api-key header, then a second HTTP Request node for the CRM write. The setup, with the node settings, is in LeadOcean + n8n.

Add a search node ahead of the enrich call when you want to build the list, not only fill it. Search paginates with cursor, takes limit from 1 to 100 and pages to 10,000 rows. When meta.depthCapped is true, narrow the filters.

json
{
  "title": ["Operations Manager"],
  "country": ["US"],
  "limit": 100
}

Step 6: Tool 5, an AI assistant over MCP

Less Annoying CRM's integrations page lists AppConnect, which links the CRM to assistants such as Claude and ChatGPT (LACRM, October 2026). Pair it with the LeadOcean MCP server and one assistant can read both.

Add the server by URL. It signs in with OAuth 2.1, so you paste no key:

text
https://api.leadocean.io/mcp

Then ask in plain English:

text
Count US operations managers with a verified email. Do not pull any records yet.
Then enrich jane.doe@acme.com and show me the title and phone.

The count runs free. The enrich spends one record. There are 13 MCP tools, and leadocean_count_companies sizes a company list for free as well.

What you get

This is the response shape from the API reference and the enrich docs (October 2026) for a person enrich, with placeholder values, abridged to contact_data.

json
{
  "success": true,
  "data": {
    "contact_data": {
      "has_email": true,
      "has_phone": true,
      "email_status": "verified",
      "email_type": "work",
      "contact_emails": [
        { "email": "jane.doe@acme.com", "type": "work", "status": "verified" }
      ],
      "contact_phones": [
        { "phone": "+14155550133", "type": "mobile", "priority": 1 }
      ],
      "contact_current_experiences": [
        { "company_name": "Acme", "company_domain": "acme.com", "job_title": "Operations Manager" }
      ]
    },
    "resume_data": {}
  }
}

The current role sits in contact_current_experiences[], with job_title and company_name. Map those into the contact's Job Title and Company Name fields.

Since 17 October 2026 the same call returns career history in resume_data: past roles, education, certifications and awards, each when held. Past employers carry no company id yet. Map the fields you need into custom fields in Less Annoying CRM and ignore the rest.

Keep the data clean

Enrichment fills blanks. It should not overwrite what a rep typed. Write only into empty fields, and keep the LeadOcean fetched_at date in a custom field so you know how old the data is. The dataset is refreshed monthly.

Run the enrich step once per contact, not on every edit. A second call on the same person spends a second record. Store a flag such as enriched=true in the CRM and filter on it in Zapier or n8n.

Check the email status before any send. Only verified, catch_all_valid and catch_all count as mailable by default. Treat risky and unknown as a hold, not a go.

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-keyCheck the header name and that $LEADOCEAN_API_KEY is set in the shell or the Zap
429Above your plan's rate limit: 5 requests a second on Free, 200 on AgencyRespect Retry-After, slow the loop or add a delay node
402The 1,000 free records are spentMove to Solo ($97 a month) or Agency ($497 a month)
404 on enrichWe hold no record for that inputFree. Skip the contact, or retry with a linkedin_url
Empty search resultsA filter value is not an exact enum string, such as vp where VP is neededLook up the value with leadocean_list_enum_values
Export refusedOver 50,000 rows a request or 500,000 a daySplit the list with narrower filters

FAQ

Does Less Annoying CRM have built-in enrichment?

No. Its integrations page has no enrichment category. You add data through a CSV import, its API, Zapier or an assistant.

Which route should I start with?

Start with the CSV for a one-off list and Zapier for new contacts. Use the script route only when you want full control of the field mapping.

How many records does a test cost?

One record per person returned or enriched. Counts, 404s and misses cost nothing, so 25 to 100 records is enough to test any route.

Can I check the email before it reaches the CRM?

Yes. Read email_status before you import. The mailable values are verified, catch_all_valid and catch_all. Drop risky, invalid and unknown.

Which plan do I need?

Free covers every route except bulk CSV export. Solo ($97 a month) suits one person. Agency ($497 a month) suits teams with volume. See pricing.

For a wider comparison of tools, read Best CRM Enrichment Tools. Running Zoho instead? See enrichment tools for Zoho CRM. The pattern is covered in CRM enrichment.

Fill the blank fields in Less Annoying CRM

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →