---
title: "Push your own businesses in, so we can work on them"
method: POST
path: "/api/v1/leads/import"
---

# Push your own businesses in, so we can work on them

`POST /api/v1/leads/import`

## Request

- Base URL: `https://lyreleads.com`
- URL: `https://lyreleads.com/api/v1/leads/import`
- Auth: HTTP bearer

Free. You are giving us data, not taking any.

Send up to 1000 objects. Once a business is on your account you can enrich it, run contact discovery on it and verify its emails, exactly as if we had found it ourselves. The response returns result_ids, so the very next call can be POST /api/enrich or POST /api/enrich/find-contacts on what you just imported.

Imported businesses are not enrolled in enrichment. Enriching them (POST /api/enrich) costs one lead per five. To have them re-checked about monthly like the businesses a search finds, enroll them with POST /api/v1/leads/enroll: one lead per two, once, enrichment included. An imported enrichment_status does not enroll a lead.

The reason to do this before a big search, rather than after: a later search that finds the same business does NOT charge you for it. We match your imported row on its website host and stamp the Google place id onto it. So import your CRM first, then sweep the market, and you pay only for what you did not already have.

Every row needs a `website` to be worth importing. Without one we cannot enrich it, and it cannot match a future search as a free duplicate. The response reports how many rows arrived without one.

Field names are the same ones the CSV import and the export use, so a file you exported from us round-trips: company_name, website, phone, address, city, state, country, type, rating, reviews, email, place_id and the rest. See /data-dictionary.

Counts against your plan's read limit (120 requests a minute on Growth, up to 600 on Agency), not the lead-spending one, because importing spends nothing.

## Request body

- object
  - `leads` object[], required
    - `company_name` string
    - `website` string: Strongly recommended. Without it the row cannot be enriched and will not dedupe against a future search.
    - `phone` string
    - `address` string
    - `city` string
    - `state` string
    - `country` string
    - `type` string: Business category.
    - `place_id` string: If you happen to have the Google place id, send it: it is the strongest identity we have.
  - `duplicateAction` 'merge' | 'overwrite' | 'exclude' | 'keep': What to do when a row already matches one of yours. merge updates in place and keeps the row id, so its contacts, notes and list memberships survive.
  - `duplicateCheckFields` string[]: How to decide two rows are the same business. Defaults to website and phone.
  - `mergePriority` 'file' | 'existing' | 'fill': fill writes only where the existing row is empty, so your own data always wins.

## Response `200`

imported, updated, unchanged, skipped, contacts_created, result_ids, without_website, leads_charged: 0

## Other responses

- `400`: leads missing, not an array, over 1000, or containing a non-object
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/lyreleads/apis/lyre-leads-api.md) · [All operations](https://skmtc.dev/lyreleads/apis/lyre-leads-api/llms.txt) · [OpenAPI document](https://skmtc.dev/lyreleads/apis/lyre-leads-api/revisions/1c7c73cc355f?raw)
