---
title: "Enrich owners of local businesses"
method: POST
path: "/maps-discovery/enrich-owners"
tags: ["maps-discovery"]
---

# Enrich owners of local businesses

`POST /maps-discovery/enrich-owners`

## Request

- Base URL: `https://api.leadsforge.ai`
- URL: `https://api.leadsforge.ai/maps-discovery/enrich-owners`
- Auth: `ApiKeyAuth` (a scheme the document does not define)

Starts an async owner search for up to 200 businesses of one search job, looking for up to maxResults owners per business and the requested contact channels (email and/or phone). Credits are reserved for the upper bound (maps owner email/phone price x maxResults per business) and settled per contact found; a business with no owner costs nothing, and businesses enriched recently are served from cache at no cost. Owner contacts the maps providers miss are backfilled by the standard email/phone waterfall at the same price; consumedCredits on the job includes that backfill. Only one owner job per search runs at a time - a second one while the first is in progress is refused with 409. Businesses not found or not owned by the account are reported as skipped in the businesses list without failing the call. Supports the Idempotency-Key header and webhookURL as the search endpoint does. Webhook payload: jobID (string), status (completed|failed|no_results), searchJobID (string), total (int), processed (int), ownersFound (int), consumedCredits (number), error (string; present on failed jobs, and on completed jobs whose email/phone backfill stopped early for insufficient credits).

## Headers

- `Idempotency-Key` string

## Request body

- EnrichMapsOwnersRequest
  - `businessIDs` string[], required
  - `clientRequestID` string
  - `maxResults` integer, required: MaxResults is the number of owners to look for per business.
  - `searchJobID` string, required
  - `wantEmail` boolean
  - `wantPhone` boolean
  - `webhookURL` string

## Response `202`

Job created

- MapsOwnerJobResponse
  - `accepted` integer
  - `businesses` MapsOwnerBusinessItem[]
    - `businessID` string
    - `reason` string
    - `status` 'queued' | 'cached' | 'skipped' | 'already_enriching'
  - `clientRequestID` string
  - `completedAt` string
  - `consumedCredits` number
  - `createdAt` string
  - `error` string: set on failed jobs, and on completed jobs whose email/phone backfill stopped early for insufficient credits
  - `jobID` string
  - `maxResults` integer
  - `ownersFound` integer
  - `processed` integer
  - `reservedCredits` number
  - `resultsURL` string
  - `searchJobID` string
  - `status` 'in_progress' | 'completed' | 'failed' | 'no_results'
  - `statusURL` string
  - `total` integer
  - `updatedAt` string
  - `wantEmail` boolean
  - `wantPhone` boolean
  - `webhookURL` string

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `402`: Insufficient credits
- `404`: Search job not found
- `409`: Owner enrichment already in progress for this search
- `429`: Too Many Requests
- `500`: Internal Server Error

---

[API](https://skmtc.dev/leadsforge/apis/leadsforge-api.md) - [All operations](https://skmtc.dev/leadsforge/apis/leadsforge-api/llms.txt) - [OpenAPI document](https://skmtc.dev/leadsforge/apis/leadsforge-api/revisions/b4a6596215b5?raw)
