Push Contacts, Leads, and Deals to Your CRM
Push Contacts, Leads, and Deals to Your CRM
This article covers every action that writes data to a CRM or outreach tool, including exact inputs, outputs, and use
cases by team type.
All actions in this article cost 0 credits per row.
Before you begin
Connect each integration before using its actions.
1. Go to Settings > Integrations.
2. Select the platform you want to connect.
3. Enter your API key or complete the OAuth flow.
You need credentials for every platform you plan to use:
- HubSpot: Private app token (requires CRM read/write scopes)
- Pipedrive: API key from Settings > Personal Preferences > API
- Zoho CRM: OAuth access token (generated in Zoho Developer Console)
- LeadConnector: API key from your sub-account settings
- Reply.io: API key from Settings > API
- Instantly: API key from Settings > Integrations > API
- Smartlead: API key from Settings > API
- HeyReach: API key from Settings > Integrations
HubSpot
Create Contact (HubSpot)
Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Email | Yes | Primary identifier | | First Name | No | | |
Last Name | No | | | Phone | No | Main phone | | Mobile Phone | No | Mobile number | | Job Title | No | | | Company | No
| Company name text | | Website | No | | | Lifecycle Stage | No | Select: subscriber, lead, marketingqualifiedlead,
salesqualifiedlead, opportunity, customer, evangelist, other | | City | No | | | State | No | | | Zip | No | | | Country
| No | | | Address | No | Street address | Outputs
contact_id, created_resource_id, created_at, updated_at, archived, firstname, lastname, email, phone, lifecyclestage,
website
Use cases
- Agencies: Sync enriched prospect lists from TexAu waterfall runs into a client's HubSpot portal row by row.
- Founder-led teams: Add anyone who replies to an outreach campaign into HubSpot automatically so no conversation goes
untracked.
- RevOps: Gate CRM entry on lifecycle stage: only create contacts that reach salesqualifiedlead or above.
- GTM engineers: Pair with enrichment columns to land complete contact records (email + title + company) in a single
workflow run.
Update Contact (HubSpot)
Credits: 0Inputs: Contact ID (required) + same optional fields as Create Contact above.
Outputs
id, created_at, updated_at, firstname, lastname, email, phone, mobilephone, jobtitle, company, lifecyclestage, city,
state, zip, country, website, annualrevenue, numberofemployees
Use cases: Run on existing contacts after company enrichment to backfill annualrevenue and numberofemployees from Apollo
or Hunter.io data.
Create Company (HubSpot)
Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Company Name | Yes | | | Domain | No | e.g. acme.com | |
Industry | No | Free text | | Phone | No | | | City | No | | | State | No | | | Country | No | | | Website | No | |
Outputs
company_id, created_at, updated_at, archived, name, domain, city, state, industry, phone, website, country
Use cases
- RevOps: Auto-create company records after a prospect books a meeting. Prevents manual data entry.
- GTM engineers: Pipe Enrich Company (Apollo) output directly into Company Name, Domain, Industry, and City columns,
then write to HubSpot in the same workflow.
Update Company (HubSpot)
Credits: 0Inputs: Company ID (required) + same optional fields as Create Company.
Outputs: Same as Create Company outputs.
Create Deal (HubSpot)
Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Deal Name | Yes | | | Deal Stage | No | Select:
appointmentscheduled, qualifiedtobuy, presentationscheduled, decisionmakerboughtin, contractsent, closedwon, closedlost.
Default: appointmentscheduled | | Pipeline | No | Default: default | | Amount | No | Numeric value | | Close Date | No |
ISO 8601 format | | Deal Type | No | Select: newbusiness, existingbusiness | | Description | No | | Outputs
deal_id, created_at, updated_at, archived, dealname, pipeline, dealstage, amount, closedate, createdate,
hs_lastmodifieddate, hubspot_owner_id
Use cases
- Agencies: Create deals with stage qualifiedtobuy immediately when an account completes enrichment and meets ICP
criteria: no manual entry from SDR.
- RevOps: Auto-create newbusiness deals with a standard close date 30 days out for every high-intent inbound contact.
Delete and Merge Records (HubSpot)
Credits: 0
| Action | Required Inputs | Output | |--------|----------------|--------| | Delete Contact (HubSpot) | Contact ID | status (boolean) | | Merge Contacts (HubSpot) | Primary Object ID, Object ID to Merge | Merged contact record | | Merge Companies (HubSpot) | Primary Object ID, Object ID to Merge | Merged company record | | Merge Deals (HubSpot) | Primary Object ID, Object ID to Merge | Merged deal record |
Pipedrive
Create Person (Pipedrive)
Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Name | Yes | Full name | | Email | No | | | Phone | No | | |
Owner ID | No | Pipedrive user ID | | Organization ID | No | Links person to an org | | Visible To | No | Visibility
setting | | Marketing Status | No | Opt-in/out status | | Add Time | No | YYYY-MM-DD HH:MM:SS | Outputs
id (person_id), name, first_name, last_name, primary_email, emails (array), phones (array), owner_id, owner_name,
org_id, org_name, active_flag, visible_to, marketing_status, add_time, update_time, open_deals_count,
closed_deals_count, label_ids
Use cases
- Agencies: Push enriched LinkedIn contacts into Pipedrive persons with org associations in bulk after a scraping or
enrichment run.
- Founder-led teams: Log every new warm intro immediately into Pipedrive without leaving your enrichment workflow.
- GTM engineers: Capture open_deals_count and closed_deals_count in output columns to flag accounts already in motion.
Create Organization (Pipedrive)
Credits: 0Inputs: Name (required), Owner ID, Visible To, Address fields.
Outputs: org_id, name, add_time, address fields, annual_revenue, employee_count, industry, linkedin_url, website
Create Deal (Pipedrive)
Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Title | Yes | | | Value | No | Numeric | | Currency | No |
Default: USD | | Expected Close Date | No | YYYY-MM-DD | | Person ID | No | Links to existing person | | Organization ID
| No | Links to existing org | | Pipeline ID | No | | | Stage ID | No | | | Status | No | open, won, lost. Default: open
| | Visible To | No | 1=Owner, 2=Followers, 3=All | Outputs
deal_id, deal_title, deal_value, deal_currency, deal_status, expected_close_date, person_id, person_name, person_email,
person_phone, pipeline_id, stage_id, pipeline_name, stage_name, owner_id, owner_name, owner_email, cc_email,
formatted_value, weighted_value, add_time, update_time, success
Use cases
- RevOps: Auto-create open deals linked to person and org records immediately after a contact meets qualification
criteria in your enrichment table.
- GTM engineers: Pass person_id from a prior Create Person step into this action to link deal and contact in a single
workflow run.
Update Person, Update Organization, Update Deal (Pipedrive)
Each Update action mirrors its Create action. The record ID field becomes required. All other fields are optional.
| Action | Required Input | Key Outputs | |--------|---------------|-------------| | Update Person (Pipedrive) | Person ID | id, name, emails, phones, update_time | | Update Organization (Pipedrive) | Organization ID | org_id, name, address fields, update_time | | Update Deal (Pipedrive) | Deal ID | deal_id, deal_status, deal_value, update_time |
Delete and Merge Records (Pipedrive)
Credits: 0
| Action | Required Inputs | Output | |--------|----------------|--------| | Delete Person (Pipedrive) | Person ID | status (success boolean) | | Merge Persons (Pipedrive) | Person ID, Merge With ID | Merged person data | | Merge Organizations (Pipedrive) | Organization ID, Merge With ID | success (boolean) | | Merge Deals (Pipedrive) | Deal ID, Merge With ID | Merged deal data |
Zoho CRM
Create Lead (Zoho CRM)
Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Company | Yes | Company name | | Last Name | Yes | | | First
Name | No | | | Email | No | Primary email | | Secondary Email | No | | | Phone | No | | | Mobile | No | | | Website |
No | | | Lead Source | No | Select: Advertisement, Cold Call, Trade Show, Web Research, Facebook, X (Twitter), etc. | |
Lead Status | No | Select: Not Contacted, Attempted to Contact, Contacted, Pre-Qualified, Not Qualified, Junk Lead, Lost
Lead | | Industry | No | Select: 18 options including Large Enterprise, MSP, Systems Integrator, Wireless Industry | |
No. of Employees | No | Number | | Annual Revenue | No | Number | | Rating | No | Select: Acquired, Active, Market
Failed, Project Cancelled, Shut Down | | Street, City, State, Zip, Country | No | Address fields | | Description | No |
Free text notes | Outputs
lead_id, status, message, created_time
Use cases
- Agencies: Import enriched prospect CSVs into Zoho leads with pre-set lead source and status for triage.
- RevOps: Log inbound form fills as leads with Lead_Status: Pre-Qualified automatically after scoring.
- GTM engineers: Route leads from specific verticals into campaigns by setting Industry and Lead_Source from
enrichment output columns.
Create Contact, Update Lead, Update Contact (Zoho CRM)
Credits: 0
Create Contact (Zoho CRM)
- Required: Last Name
- Optional: First Name, Email, Phone, address fields, Job Title
- Outputs: contact_id, status, created_time, message
Update Lead (Zoho CRM)
- Required: Record ID
- Optional: All fields from Create Lead
- Outputs: status, message, modified_time, record_id
Update Contact (Zoho CRM)
- Required: Record ID
- Optional: All fields from Create Contact
- Outputs: status, message, modified_time, record_id
LeadConnector
Create Contact (LeadConnector)
Integration: LeadConnector (GoHighLevel) | Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Location ID | Yes | Sub-account ID | | First Name | Yes | |
| Last Name | No | | | Email | No | | | Phone | No | E.164 format | | Contact Type | No | Select: lead, customer | |
Company Name | No | | | Address, City, State, Postal Code, Country | No | | | Website | No | | | Timezone | No | Select
from dropdown | | Source | No | Attribution source | | Tag | No | Single tag string | | Global DND | No | Boolean | |
DND Call/Email/SMS/WhatsApp/GMB/FB Status | No | Select: active, inactive per channel | Outputs
contact_id, date_added, date_updated, type, location_id, first_name, last_name, email, valid_email, bounce_email,
unsubscribe_email, dnd, phone, city, state, country, postal_code, website, source, company_name + DND status per channel
Upsert Contact (LeadConnector)
Credits: 0
Same inputs as Create Contact, plus Create New If Duplicate Allowed (boolean).
The action checks email or phone against the Location's duplicate settings before deciding whether to create or update.
Additional outputs: is_new (boolean: true if a new record was created), succeeded (boolean)
Use cases
- Agencies: Use Upsert Contact for client sub-accounts where leads flow from multiple sources. Prevents duplicate
records without needing to pre-check.
- GTM engineers: Set is_new as a condition column to trigger follow-up actions only for net-new contacts.
- RevOps: Set channel-level DND flags at creation time so contacts land with correct communication preferences from
day one.
Reply.io
Create Contact (Reply.io)
Integration: Reply.io | Credits: 0.io, this action updates the existing contact.
Inputs
| Field | Required | Notes | |-------|----------|-------| | Email | Yes | | | First Name | Yes | | | Last Name | No | |
| Company | No | | | Job Title | No | | | Phone | No | | | City, State, Country | No | | | Time Zone ID | No | | |
LinkedIn Profile URL | No | | Outputs
id, email, firstName, lastName, company, city, state, country, timeZoneId, title, phone, phoneStatus, linkedInProfile,
addingDate, companySize, industry, salesNavigatorUrl, linkedInRecruiterUrl, accountId
Create Contact and Push to Campaign (Reply.io)
Integration: Reply.io | Credits: 0
Creates a contact and immediately enrols them in a sequence. Use this when you want one-step contact creation and
campaign activation.
| Input | Required | |-------|----------| | Campaign ID | Yes: select from dropdown | | Email | Yes | | First Name | Yes
| Output: status (response code)
Update Contact (Reply.io)
Integration: Reply.io | Credits: 0
Same inputs as Create Contact. Acts as an upsert: if the email is found, the contact is updated; if not, a new contact
is created.
Use cases
- Agencies: Use Create Contact and Push to Campaign to move enriched leads directly into cold email sequences in one
row-level action.
- Founder-led teams: Create Contact updates existing records as new data comes in, so your sequences always use the
latest job title and company.
- GTM engineers: Link the id output from Create Contact into a follow-up Update Contact column to backfill LinkedIn
URLs after a separate enrichment run.
Instantly
Create Lead (Instantly)
Credits: 0Inputs
| Field | Required | Notes | |-------|----------|-------| | Email | Yes | | | Campaign ID | No | Required if creating
within a campaign | | List ID | No | | | First Name | No | | | Last Name | No | | | Company Name | No | | | Company
Domain | No | e.g. acme.com | | Phone | No | | | Website | No | | | Personalization | No | Custom note for email
personalization | | Assigned To (User ID) | No | | | Lead Value | No | High, Medium, Low | | Interest Status Code | No
| 1=Interested, -1=Not Interested | | Skip if in Workspace/Campaign/List | No | Boolean: prevents duplicates | | Verify
on Import | No | Boolean | Outputs
id (lead_id), campaign, list_id, email, first_name, last_name, company_name, company_domain, phone, website,
personalization, status, enrichment_status, verification_status, email_open_count, email_click_count, email_reply_count,
timestamp_created, timestamp_updated
Add Lead To Sequence (Instantly)
Credits: 0
Adds a lead directly to an active campaign sequence. Use this when the lead already exists and you want to enrol them in
a new sequence.
| Field | Required | |-------|----------| | Campaign ID | Yes | | Email | Yes | | First Name, Last Name, Company Name,
Phone, Website | No | | Personalization | No | | PL Value Lead | No | Outputs: email, first_name, last_name,
company_name, phone, personalization, campaign_id, id (lead_id)
Use cases
- Agencies: Set Skip if in Campaign: true on Create Lead to prevent re-enrolling contacts already in sequences for a
client campaign.
- GTM engineers: Pass AI Column output into the Personalization field to give each lead a custom first line without
manual writing.
- Founder-led teams: Use Add Lead To Sequence to move a list of warm contacts from a previous campaign into a new
follow-up sequence automatically.
Smartlead
Add Leads to Campaign (Smartlead)
Credits: 0Inputs
| Field | Required | |-------|----------| | Campaign ID | Yes | | Email | Yes | | First Name, Last Name, Company Name |
No | | Job Title | No | | Phone Number | No | | Website | No | | Location | No | | LinkedIn Profile | No | Outputs
ok (boolean), upload_count, already_added_to_campaign, total_leads, duplicate_count, block_count, invalid_email_count,
bounce_count, lead_import_stopped_count, is_lead_limit_exhausted (boolean)
Use cases
- Agencies: Check invalid_email_count and bounce_count outputs to validate data quality before billing clients for
enrichment runs.
- RevOps: Set a condition rule to stop workflow execution if is_lead_limit_exhausted returns true, preventing wasted
rows post-quota.
- GTM engineers: Route leads from separate enrichment columns (email, company, title, LinkedIn) into Smartlead in a
single action at the end of the workflow.
HeyReach
Add Leads to Campaign (HeyReach)
Credits: 0(LinkedIn)
HeyReach sends LinkedIn outreach from connected LinkedIn accounts. You must pass a LinkedIn Account ID: this is the ID
of the sending LinkedIn account in HeyReach, not the lead's LinkedIn account.
Inputs
| Field | Required | Notes | |-------|----------|-------| | Campaign ID | Yes | Select from dropdown | | LinkedIn
Account ID | Yes | The HeyReach sender account ID | | First Name, Last Name | No | | | Email Address | No | | | LinkedIn
Profile URL | No | | | Location | No | City or region | | Summary | No | Headline or summary text | | Company Name | No
| | | Position | No | Job title | | About | No | Bio text | Outputs: rawResponse: returns "success" or "failed"
Use cases
- Agencies: Build LinkedIn outreach campaigns from enriched lead lists. Pipe LinkedIn Profile URL from B2B Enrichment
into HeyReach without manual import.
- GTM engineers: Check the rawResponse output with a condition rule to flag any failed adds and re-run them in a
separate pass.
Troubleshooting
Contact was not created: no error returned HubSpot, Zoho, and Reply.io deduplicate on email. If the email already
exists, the action may silently update instead of create. Check the contact_id in the output: if it matches a known ID,
the record was updated.
LeadConnector action fails with "Location not found" The Location ID is the sub-account ID, not the agency-level account
ID. Copy it from the sub-account URL in your LeadConnector dashboard.
**HeyReach output shows failed for all row
Push Contacts, Leads, and Deals to Your CRM (Part 2)
Continued from Part 1.
s** The LinkedIn Account ID field requires the sender account ID from HeyReach, not a LinkedIn URL or contact ID. Go to
HeyReach > Accounts to find the correct ID for the sending account.
Instantly leads not appearing in campaign If Skip if in Campaign is set to true and the lead was already added, no
record is created and no error is returned. Check the existing campaign lead list first or set Skip if in Campaign to
false to force re-addition.
Smartlead is_lead_limit_exhausted returns true Your Smartlead plan has reached its active lead limit. Either upgrade
your plan or archive completed leads from finished campaigns to free up quota.
Zoho CRM returns a 401 error Zoho uses OAuth tokens that expire. Reconnect the Zoho integration under Settings >
Integrations to refresh the access token.