Contacts+
CRMConnect AI agents to Contacts+, a shared contact management platform from FullContact. Agents create and dedupe contacts, apply tags, share address books across teams, and manage webhook subscriptions for downstream systems.
What This Integration Enables
Contacts+ is an address book, not a pipeline. It is where a scanned business card and a half-remembered introduction land long before anyone decides whether that person matters commercially, and it is usually shared, which is exactly what makes it fragile. The API reflects that reality more honestly than most contact tools do. Every update and every delete requires the record's current etag, so you cannot write without first reading, and Contacts+ will refuse a write that races another person's edit unless you explicitly instruct it to win. Most integrations treat that as friction to be configured away. FlowRunner treats it as the most useful signal the API produces, because a rejected write is not a failure, it is the platform telling you two sources of truth disagree about a human being.
Agents get the full record surface: create, update, delete, and search across personal and team contacts, tag creation and bulk tag application through Manage Contact Tags, ownership reassignment through Change Contact Owner, team enumeration through List Teams, and photo attachment from a file URL through Upload Contact Photo. Most actions accept an optional Team ID, so the same flow can operate on one person's private book or on a shared team book depending on what you pass, and Change Contact Owner requires one. Contacts+ ships no triggers to FlowRunner. The vendor has a webhook subscription API and this connector manages it through Create Webhook, Search Webhooks, Delete Webhook, Get Webhook Batches, and Get Webhook Triggers, but the payload Contacts+ delivers to a subscribed URL is not documented from a primary source, so no realtime trigger was built rather than one that guesses. Agents pick up change by polling List Contacts and Search Contacts with their scroll and search cursors, and Get Webhook Batches audits deliveries already going to another receiver across a trailing fourteen day window. Deletes of contacts, tags, and webhooks are permanent, which is why the digital andon cord hangs where the writes are contested.
Without FlowRunner
With FlowRunner
Use Case Scenarios
An address book that stops drifting away from the CRM
The team's real customer data lives in HubSpot, but the shared Contacts+ book is what the field team actually opens on a phone. On a schedule, the agent pulls contacts changed since the last run, then calls Search Contacts on each email address to find the counterpart in the team book. For people with no match, Create Contact writes the record and Manage Contact Tags applies the account tier and territory. For people who already exist, the agent calls Get Contacts by IDs to read the record and its etag, compares the fields, and updates only the ones that genuinely changed. Records where both systems changed since the last sync are not written at all. They are collected and reported, because a two-sided change is a disagreement and not a stale field.
Business cards that become tagged records without a data entry queue
Cards scanned at a conference arrive as rows in Google Sheets with an image URL per row. The agent reads each row, calls Search Contacts to check whether the person is already in the book, and for genuinely new people calls Create Contact with the parsed name, company, and email. Upload Contact Photo then downloads the card image from the URL and attaches it to the record, so the original artifact stays with the data extracted from it. Manage Contact Tags applies the event name in one pass across the whole import, which makes the batch reversible as a set later. Rows where the parsed email is malformed or the company is missing are held back and routed to a person rather than written as a half record.
Ownership that follows the team, not the person who left
A rep changes territory. The agent calls List Teams to resolve the team context, then Search Contacts with a Team ID to pull every contact currently owned by the departing rep. It assembles the list, cross-references it against open work in the CRM, and posts a summary to the sales manager in Slack naming the accounts involved. Once the manager confirms the receiving rep, Change Contact Owner reassigns the set inside the team, and Manage Contact Tags stamps the transition date so the handover is visible on the record itself rather than in someone's memory of a meeting.
Human-in-Loop Highlight
The gate here is not the delete. It is Update Contact with Resolve Conflicts set to true. Contacts+ uses optimistic concurrency: you read a record, you get its etag, and your update is accepted only if that etag is still current. If somebody edited the contact in the meantime, the write is rejected. Resolve Conflicts is the escape hatch that tells Contacts+ to overwrite the record anyway, and it is genuinely useful, because a rejected write in the middle of an overnight sync will otherwise strand hundreds of records. It is also the single fastest way to erase a colleague's work without anybody noticing, because the overwrite succeeds quietly and the previous value is simply gone. So the sync agent does not decide. It writes every uncontested record straight through, then stops on the contested ones and posts to the address book owner in Slack: "Overnight sync matched 340 contacts. 318 updated cleanly. 22 were edited in Contacts+ since I read them. Of those, 14 differ only in a field the CRM is authoritative for, and 8 have a mobile number that was changed by hand in Contacts+ and does not match the CRM. Overwrite the 14, and leave the 8 for review?" The owner answers, and only then does the agent re-read each approved record for a fresh etag and call Update Contact with Resolve Conflicts on that set alone. The eight hand-edited numbers stay hand-edited, which is almost always the right answer, because a person typing a mobile number into a shared address book is usually looking at better evidence than the nightly job.
Agent Capabilities
22 actionsAccount
1- Get Account Returns the connected Contacts+ account. Used as the preflight check that the connection is live before a batch run commits to any writes.
Contacts
9- Get Contacts by IDs Retrieves one or more contacts by identifier, returning the current `etag` for each. This is the read that has to happen before any update or delete, so it is the first step of nearly every write path.
- List Contacts Returns contacts from the personal book, or from a team book when a Team ID is supplied. Cursor based: pass the `scrollCursor` from the previous response to page. Used for full sweeps and reporting.
- Search Contacts Searches contacts by name, email, or company, paging with a `searchCursor`. Used as the duplicate check before a create, and to assemble a target set for tagging or reassignment.
- Create Contact Creates a contact in the personal or team book. Used when a form, a card scan, or a spreadsheet introduces someone the book does not have.
- Update Contact Updates an existing contact. Requires the record's current `etag`, and accepts Resolve Conflicts to overwrite a record that changed since that etag was read. The overwrite path is the one held behind human approval.
- Delete Contact Deletes a contact using its current `etag`. Permanent and not recoverable, so agents assemble the set and a person approves it.
- Change Contact Owner Reassigns ownership of a contact within a team. Requires a Team ID. Used for territory changes and joiner and leaver handovers.
- Manage Contact Tags Applies and removes tags across contacts. Used to segment an address book in bulk, which also makes a batch import reversible as a set.
- Upload Contact Photo Downloads an image from a supplied Photo URL and attaches it to the identified contact. Used to keep a scanned business card attached to the record parsed from it.
Tags
5- Get Tags by IDs Retrieves tags by identifier, returning the `etag` needed to update or delete them.
- List Tags Returns the tags in the personal or team context, cursor paged. Used to resolve a tag before applying it and to audit taxonomy drift.
- Create Tag Creates a tag. Used when a campaign, event, or territory needs a label the book does not yet have.
- Update Tag Renames or amends a tag using its current `etag`. Used to keep segmentation labels consistent as naming conventions change.
- Delete Tag Deletes a tag. Permanent, and it removes the segmentation that other flows may be selecting on, so it sits behind review.
Teams
1- List Teams Returns the teams the connected account belongs to. Used to resolve the Team ID that switches an action from a personal book to a shared one, and required before Change Contact Owner.
Webhooks
6- Get Webhooks by IDs Retrieves webhook subscriptions by identifier, returning the `etag` required to delete them.
- Search Webhooks Finds existing webhook subscriptions on the account. Used to audit which external receivers are already subscribed before adding another.
- Create Webhook Registers a webhook subscription so a separate receiving system is notified of contact and tag changes. Note that this subscribes an external endpoint of your choosing; it does not create a FlowRunner trigger.
- Delete Webhook Removes a webhook subscription using its `etag`. Permanent, and it silently stops delivery to whatever system depended on it.
- Get Webhook Batches Returns delivery batches for a subscription across the trailing fourteen day window. Used to audit whether an external receiver is actually being fed.
- Get Webhook Triggers Returns the trigger definitions available for webhook subscriptions. Used to confirm which change types a subscription will fire on before registering it.
Frequently Asked Questions
What can FlowRunner do with Contacts+?
FlowRunner agents can run Get Account, Get Contacts by IDs, and List Contacts in Contacts+, plus 19 more actions.
Does connecting Contacts+ to FlowRunner require OAuth?
Yes. Contacts+ connects to FlowRunner with OAuth 2.0, so agents authenticate without handling raw credentials.
Can Contacts+ trigger a FlowRunner workflow automatically?
Contacts+ doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.
Start building with Contacts+
$100 in credits. No card required. Connect in minutes.