Skip to content
Integrations

Where a finished list goes

Where can Cuvy send a list of emails it has found?

A finished list leaves Cuvy as a CSV, or straight into HubSpot. The API covers anything else. Google Sheets, Salesforce, Pipedrive and outbound webhooks are on the list and are not connectable yet. Rows go out with thirteen columns, contacts you already hold are updated rather than duplicated, and exporting costs no credits — the credit was spent at the lookup.

Destinations today
15
Columns in the CSV
13
Duplicates matched on
The email address
Cost to export
No credits

50 addresses free every month · no card

What works today

15 destinations, and what each one needs

They differ in who does the work at the far end, which is the only difference worth designing around.

A file

A CSV, with the same thirteen columns every time. Each segment downloads on its own, so the sendable rows are not mixed with the ones you have not judged yet.

A CRM or sequencer

HubSpot, Pipedrive, Attio, Creatio, Salesloft and more. Connected once by an Owner or Admin, then rows are written as contacts — created if they are new, updated if that address is already there. Salesforce, Zoho and Outreach need a developer app registering first.

Your own code

Two directions. Cuvy posts signed events to a webhook you control, with retries and a delivery log; or your code asks the API for a person and gets one back.

Salesforce, Zoho CRM, Outreach are built but need a developer app registered before a workspace can connect one, and the app says exactly that on their cards. Still not built at all: Google Sheets. The app uses the same words, so nobody wires a launch to one of them on the strength of this page.

What arrives

Thirteen columns, in the same order every time

Written down because the real question behind most integration questions is whether the file has the column your system needs.

full_namefirst_namelast_nametitlecompanycompany_domainlocationemailemail_statusconfidencemobilemobile_statusenriched_at

email_status is the one to map into your own system. It says whether two independent sources agreed, whether one did, whether the address is one you supplied and we merely confirmed, or whether nothing was found — and those four groups download separately as well as together. A sequencer that only ever sees the first group is a sequencer that never sends to a guess.

The two mobile columns are in the file because the same export serves workspaces that look up numbers as well as addresses. If you do not, they are blank and your importer can ignore them.

Duplicates

A contact you already have does not become two

Three rules, all of them about not damaging a record that was there before Cuvy was.

One contact, not two
Before a row is written, Cuvy looks for the address it is about to send. A contact the CRM already holds is updated in place and reported as an update — the conflict is the answer, not an error.
Two things it matches on
The email address, and the record Cuvy itself created for that person on an earlier push. Names are not fuzzy-matched: an incorrect merge takes longer to undo than a duplicate takes to delete.
Nothing is emptied
A field Cuvy has no value for is left out of the request rather than sent blank, so an existing contact cannot lose a phone number or an owner to a push that had nothing to put there.
How a push runs

Three steps, then a count you can check

  1. Connect the destination once

    An Owner or Admin approves the connection from the workspace settings. Cuvy asks the CRM for the narrowest thing that works — read and write on contacts, nothing else.

    Owner or Admin
  2. Choose which rows go

    A list, a saved search, or a selection from the people table. Confirmed addresses are what a CRM push takes; rows with a single source stay behind for you to look at first.

    Confirmed rows
  3. Push, and read the count

    You get four numbers back — created, updated, skipped, failed — and a log of the last pushes with the contact each row landed on. A row that failed says why.

    Four numbers back
The honest limits

It is a push, not a sync

Worth saying plainly, because the word on everybody else's page is the other one.

Rows travel in one direction. Cuvy writes contacts into your CRM; your CRM does not write anything back into Cuvy. Change a job title in HubSpot and Cuvy will not know. Delete a contact there and it stays in your Cuvy workspace until you delete it here too. Nothing runs on a schedule against your CRM at all — a push happens when somebody asks for one.

That is a smaller promise than a two-way sync, and it is the one we can keep. A sync needs conflict rules, a change feed and an answer to "which side wins", and a tool that claims all three without them is a tool that quietly overwrites something you cared about at 3am.

If the destination you need is not on the list, a webhook or the API is the shortest route — Cuvy posts to any endpoint you control, or your code pulls rather than waiting to be pushed to. Google Sheets is the one thing still asked for that is not built. If none of that fits, write to sales@cuvy.io with the tool and the fields you need in it. There is no queue to join and no form; it is a short list and it is chosen from what people ask for.

Questions

What people ask before wiring anything up

Which columns are in the CSV?

Thirteen, in a fixed order: full_name, first_name, last_name, title, company, company_domain, location, email, email_status, confidence, mobile, mobile_status and enriched_at. The order never changes between exports, so a spreadsheet formula or an importer mapping written once keeps working.

Does Cuvy read our whole CRM database?

No. The connection asks for two permissions on contacts, read and write, and the read is used to find the one contact a row is about to be written to. Nothing is pulled back into Cuvy to be searched, scored or resold, and your CRM is not a source the lookup consults.

If a contact is already in the CRM, do we end up with two?

No. A contact the CRM already holds at that address comes back as a conflict, and Cuvy treats the conflict as the answer: the existing record is updated and counted as an update rather than a second contact being created. Push the same list twice and the second push updates what the first one made.

Will a push overwrite a field we have already filled in?

Only with something. Cuvy sends the fields it has a value for and leaves the rest out of the request entirely, because sending an empty string is how a CRM ends up losing a phone number to a blank. Which Cuvy field lands on which CRM property is a mapping you can change.

There is no connector for the tool we use. What then?

Point a webhook at it. Cuvy posts signed events to any https endpoint you control, with retries and a delivery log, so anything that can receive an HTTP request can be the destination — that is also how the Zapier support works, through a Catch Hook you create. There is no published Cuvy app in Zapier's directory. If you would rather pull than be pushed to, the API answers for a person on demand. If you want a named connector added, write to sales@cuvy.io and say which tool and which fields.

Does exporting or pushing cost credits?

No. Credits are spent once, when an address is found. Sending the same rows to a CSV, then to HubSpot, then through the API costs nothing extra, and re-downloading an export you already took costs nothing either.