Prospect search

Save people-search results into a list

Run the search server-side and save up to limit matches into a contact list. The filter source is exactly one of filters, a saved search (savedSearchId / savedSearchName), or a natural-language query — the same contract as POST /prospects/search. The destination is exactly one of listId or listName; listName is create-or-reuse by exact name (case-insensitive), a name shared by two lists is a 409, and system list names are refused.

enrich selects what runs on the saved rows: none (default) saves the search rows as-is at 2 credits per row; email, phone or phone_and_email run the enrichment waterfall while saving (50 / 200 / 250 credits per row pre-checked), and rows already carrying the requested data are not re-charged. Only the enrichment modes report totalContacts, estimatedMinutes, and the run's jobId and status (pending while it waits behind your other enrichment job, processing once it runs): poll GET /business/jobs/{jobId} for its status and counts. A run whose balance runs out mid-run pauses (stopped) and is resumed from the app.

An optional campaignId XOR campaignName attaches the destination list to that campaign in the same motion, and the response's campaign.attached says whether that succeeded — a failed attach never retracts a started save. The attach happens when the save STARTS: a draft campaign enrols the full list at approval, while an ACTIVE non-dynamic campaign enrols only the rows present at attach time.

Always async: 202 means the job started, not that the list is populated — poll the list's rows. Billing: this runs its own search, it does NOT reuse a prior POST /prospects/search, so previewing first and then saving pays for the search twice. Saving a hand-picked subset of results is not supported; narrow the filters instead.

Errors:

  • 402 INSUFFICIENT_CREDITS — The balance does not cover the pre-check for this request; nothing was billed.
  • 404 SAVED_SEARCH_NOT_FOUND — No saved search of yours has that id or exact title.
  • 404 CAMPAIGN_NOT_FOUND — No campaign of yours matches campaignId / campaignName; nothing was saved.
  • 404 LIST_NOT_FOUND — With enrich other than none: listId is not one of your lists, or it was deleted before the save started. Nothing was saved or billed.
  • 409 SAVED_SEARCH_NAME_AMBIGUOUS — Two of your saved searches share that title — reference it by savedSearchId instead.
  • 409 CAMPAIGN_NAME_AMBIGUOUS — Two of your campaigns share that name — pass campaignId instead.
  • 409 LIST_NAME_AMBIGUOUS — Two of your lists share that name — pass listId instead.
  • 409 LIST_NAME_TAKEN — With enrich other than none: the new list for listName could not be created because the name was taken in the meantime. Retry, or pass listId. Nothing was saved or billed.
  • 409 ALL_CONTACTS_ALREADY_ENRICHED — Every matching row already carries the requested enrichment — nothing to run and nothing billed.
  • 422 VALIDATION_FAILED — The request failed the declared schema; param names the offending key and message quotes the rule it broke.
  • 422 SAVED_SEARCH_TYPE_MISMATCH — The saved search exists but stores the other kind of filters; param is savedSearchId.
  • 422 SAVED_SEARCH_INVALID — The STORED filters no longer form a runnable search — every value was retired, or the blob translates to nothing.
  • 422 QUERY_FILTERS_INVALID — The natural-language query produced no usable filter; name concrete criteria.
  • 422 LIST_NAME_RESERVED — listName is a system/dynamic list title and cannot be a destination.
  • 422 CAMPAIGN_LIST_CAP_REACHED — The campaign already holds the maximum number of attached lists; nothing was saved.
  • 429 RATE_LIMITED — Per-token rate limit for this bucket exhausted; retry after the window in the RateLimit-Reset header.
  • 500 UNEXPECTED_ERROR — The request failed inside the service; nothing was billed and the request_id identifies the failure.

Requires one of the following token scopes: search.

post/business/prospects/search/save-to-list

Request

  • Base URL: https://api.tryfuse.ai/api/v1
  • URL: https://api.tryfuse.ai/api/v1/business/prospects/search/save-to-list
  • Auth: HTTP basic

Request body

savedSearchIdstring

Id of one of your PEOPLE saved searches to take the filters from instead of filters (a company saved search answers 422 SAVED_SEARCH_TYPE_MISMATCH).

savedSearchNamestring

Exact title of one of your people saved searches to take the filters from instead of filters; two searches sharing the title answer 409 SAVED_SEARCH_NAME_AMBIGUOUS.

querystring

Natural-language description of who to find (max 2000 chars), converted into filters server-side instead of filters; criteria that could not be mapped come back as unresolvedCriteria, and a query yielding no filter answers 422 QUERY_FILTERS_INVALID.

limitinteger required

Maximum number of matching profiles to save (1-10000). Credits are pre-checked per row before the job starts: 2 with enrich: none, otherwise the enrichment price per row (402 INSUFFICIENT_CREDITS when the balance is short).

listIdstring

Id of an existing contact list to save into (exactly one of listId / listName).

listNamestring

Name of the destination contact list, created when none exists; an existing list with the same name (case-insensitive) is reused, a name shared by several lists answers 409 LIST_NAME_AMBIGUOUS, and system list names answer 422 LIST_NAME_RESERVED.

enrich'none' | 'email' | 'phone' | 'phone_and_email'

What to run on the saved rows: none (default) saves the search rows as-is for 2 credits per row; email (pre-checks 50 credits per row), phone (200) or phone_and_email (250) run the enrichment waterfall while saving — rows already carrying the requested data are not re-charged.

campaignIdstring

Id of one of your campaigns to attach the destination list to once the save has started (optional; exactly one of campaignId / campaignName).

campaignNamestring

Exact name of one of your campaigns to attach the destination list to (optional); no match answers 404 CAMPAIGN_NOT_FOUND and a shared name 409 CAMPAIGN_NAME_AMBIGUOUS.

Response

Success

listIdsstring[] required

Destination list ids the save is writing into (the reused list, or the one just created).

enrich'none' | 'email' | 'phone' | 'phone_and_email' required

Echo of the enrichment mode the job is running.

totalContactsinteger

Enrichment modes only: how many rows the job will process.

estimatedMinutesinteger

Enrichment modes only: rough completion estimate.

jobIdstring

Enrichment modes only: the run's job, to poll at GET /business/jobs/{jobId}.

status'pending' | 'processing'

Enrichment modes only: pending while the job waits behind your other enrichment job, processing once it runs.

Changes

No recorded changes to this operation across all 1 revision of this API.