Skip to main content
The Leads grid is the working surface for everything ManyPI has found or you have imported. It is workspace-wide: teammates on a paid plan see and act on the same pool.

Lead fields

Core fields

Fixed columns every lead has: company · full_name · title · email · phone · domain · linkedin_url · location · source_url · score · status Validation writes four more: email_status, email_provider, email_is_role and email_validated_at.

Custom columns

Anything else is a custom column you declare yourself, with a label, a type and an optional description. Values live on the lead’s custom object. Set auto-research on a column and the agent fills it in on future runs without you restating it in every search. Declare columns in the grid’s column menu, or over the API with POST /api/leads/fields.
Columns are declared separately from values on purpose — a column you add now and fill later has no data to be inferred from, so it has to exist in its own right.

Statuses and flags

Two flags are not statuses:
  • Archived — hidden from every view and from exports, but still stored and still counted against… nothing. Archiving is how you free plan capacity without deleting history.
  • Unsubscribed — the recipient opted out. They are excluded from every send permanently.
Filter by either with ?status=archived or ?status=unsubscribed.

Importing

Leads → Import accepts CSV, a pasted block, or manual entry. Map your columns onto ManyPI fields; anything unmapped can be declared as a new custom column in the same step.

Duplicate handling

Choose what happens when an incoming row matches a lead you already have: Matching is by email, falling back to domain plus name. A row with neither has nothing to be filed under and is skipped.

Over the API

POST /api/leads/import takes up to 100 rows per request. Chunk larger files client-side — that is what the dashboard importer does, and it is why a ten-thousand-row file shows real progress instead of a spinner that eventually times out.
The response reports exactly what happened:
If the workspace filled up mid-import the response still returns 200 — the rows that fitted were written — with code: "lead_limit" so your client can report it honestly.

Exporting

GET /api/leads/export streams the filtered set as CSV, up to 10,000 rows, honouring the same status and q filters as the grid. Archived leads are excluded unless you ask for them.

Bulk actions

Select rows and change status, archive, restore or delete in one go. Over the API that is PATCH /api/leads and DELETE /api/leads with up to 500 ids per call.

Searching and filtering

GET /api/leads supports: The response also returns customFields, campaigns (your past lead searches with counts), workspaceTotal and leadLimit, which is everything a client needs to render the grid without a second round-trip.