Skip to main content
POST
Start a connections import
A real run can create thousands of contacts and companies in your CRM, and it cannot be undone. A preview (dry_run, the default) writes nothing to your CRM, but it still reads your CRM, saves matches in Groovin and emails you.

What this call does

Good to know

  • Attio and HubSpot only. Unknown fields are refused here, unlike on other routes.
  • This answers in seconds and the import keeps running: count on about 25 minutes per 2,400 rows, and you are emailed when it is done.
  • Everyone in the file is recorded as a LinkedIn connection of the person whose export it is, for good.
  • Compare total_rows with your file: a mismatch means the file was cut on the way in.
Your AI assistant reaches the same action through the MCP tool start_linkedin_connections_import.

Authorizations

Authorization
string
header
required

Your Groovin API key (gv_live_…), created in the extension under Settings, MCP and API.

Body

application/json
csv
string

The whole Connections.csv as text, up to 10 MB and 30,000 rows. Always previewed first: use it with dry_run: true or without dry_run.

source_import_id
string

A finished preview to run for real, with dry_run: false. Previews are kept for 72 hours.

dry_run
boolean

true (the default) previews. false runs for real, and needs source_import_id.

file_name
string

Names the result file you download.

add_to_default_lists
boolean

true (the default) adds records to your default Groovin lists. false adds them to none.

on_behalf_of
string

Org admins only: the email of the teammate whose export this is. Everyone in the file is recorded as their connection.

Response

Success.

The state of an import. Every import route answers with this.

import_id
string
required

The import.

status
string
required

ready or running while it works, then completed, cancelled or failed.

dry_run
boolean
required

true for a preview.

crm_name
string
required

Your CRM: "attio" or "hubspot".

file_name
string | null
required

The name of the result file.

created_at
string
required

When the import was created.

started_at
string | null
required

When it started.

finished_at
string | null
required

When it finished.

total_rows
integer
required

Data rows in the file. Compare this with your file: a mismatch means the file was cut on the way in.

processed_rows
integer
required

Rows done.

pending_rows
integer
required

Rows left.

counts
object
required

The running totals of an import. On a preview, *_would_create says what a real run would create.

lists
object
required

The CRM lists the import adds records to.

column_map
object
required

Which column of the file was read as what.

parse_warnings
string[]
required

What the file reader could not read.

last_error
string | null
required

The latest problem, if any.

is_processing
boolean
required

true while rows are being worked on right now.

cancel_requested_at
string | null
required

When you asked to stop.

rows_purged_at
string | null
required

When the row data was deleted. No row detail and no re-run after that.

finished_notified_at
string | null
required

When you were emailed.

retention_hours
integer
required

How long row data is kept, in hours.

company_domain_credits_remaining
integer | null
required

Your domain credits when this run last looked.

domain_credits_exhausted_at
string | null
required

When credits ran out. Later companies were created with a name but no domain.

on_behalf_of
object | null
required

The teammate whose connections these are. null means your own.

update_recognised_contacts
boolean
required

true when a real run updates the contacts it recognises.

poll_after_seconds
integer | null
required

Wait this long before asking again. null once the import can no longer change.

next_step
string
required

What to do now, in one sentence.

rows_available
boolean
required

false once the row data was deleted: counts only.

rows
object[]

One page of rows, if you asked.

rows_total_matched
integer

Rows matching your filter.

rows_returned
integer

Rows in this answer.

rows_offset
integer

The offset you sent.

rows_truncated
boolean

true when more rows exist: ask with a new offset.