ACTION_ID: salesloft_upsert_person NAME: Salesloft: Upsert person CATEGORY: Outreach CREDITS: 0 Create or update a Salesloft person keyed on email address, covering contact details, job data, compliance flags and location. Returns whether the call created or updated, plus the full person record. PREREQUISITE: Salesloft account connection — the user must create it in the Floqer UI (Connections page); an agent cannot. Without it the action fails the row with a connection / authentication error. Confirm it exists before configuring. 1. INPUTS first_name (string, required) First Name. First name last_name (string, required) Last Name. Last name email_address (string, required) Email Address. Email address secondary_email_address (string, optional) Secondary Email Address. Alternate email address personal_email_address (string, optional) Personal Email Address. Personal email address phone (string, optional) Phone. Phone without formatting home_phone (string, optional) Home Phone. Home phone without formatting mobile_phone (string, optional) Mobile Phone. Mobile phone without formatting title (string, optional) Title. Job title job_seniority (string, optional) Job Seniority. The Job Seniority of a Person, must be one of director, executive, individual_contributor, manager, vice_president, unknown linkedin_url (string, optional) LinkedIn URL. Linkedin URL twitter_handle (string, optional) Twitter Handle. The twitter handle of this person personal_website (string, optional) Personal Website. The website of this person tags (stringArray, optional) Tags. All tags applied to this person. [Comma-separated values] person_stage_id (number, optional) Person Stage ID. ID of the PersonStage of this person eu_resident (boolean, optional) EU Resident. Whether or not this person is a European Resident in order to keep in accordance with GDPR protocols. do_not_contact (boolean, optional) Do Not Contact. Whether or not this person has opted out of all communication. Setting this value to true prevents this person from being called, emailed, or added to a cadence in SalesLoft. If this person is currently in a cadence, they will be removed. contact_restrictions (stringArray, optional) Contact Restrictions. Specific methods of communication to prevent for this person. Values currently accepted: call, email, message owner_id (number, optional) Owner ID. ID of the User that owns this person city (string, optional) City. City state (string, optional) State. State country (string, optional) Country. Country salesloft_account_id (number, optional) Salesloft Account ID. ID of the Account to link this person to person_company_name (string, optional) Person Company Name. Company name. This property is specific to this person, unrelated to the company object. Updating the company object associated with this person is recommended person_company_website (string, optional) Person Company Website. Company website. This property is specific to this person, unrelated to the company object. Updating the company object associated with this person is recommended person_company_industry (string, optional) Person Company Industry. Company industry. This property is specific to this person, unrelated to the company object. Updating the company object associated with this person is recommended work_city (string, optional) Work City. Work location - city work_state (string, optional) Work State. Work location - state work_country (string, optional) Work Country. Work location - country 2. OUTPUTS upsert_type (string) — The type of upsert. One of: create, update person_details (object) — Details of the person upserted 3. HOW TO CONFIGURE No dynamic dropdowns — every field is a plain value. Configure Action body: { "inputs": { "first_name": "{{input.first_name}}", "last_name": "{{input.last_name}}", "email_address": "{{person_work_email_waterfall_01ab.work_email}}", "title": "{{enrich_person_linkedin_profile_01cd.person_current_job_title}}", "job_seniority": "manager", "linkedin_url": "{{input.linkedin_url}}", "mobile_phone": "{{personal_phone_number_by_linkedin_url_waterfall_01ef.phone_number}}", "person_company_name": "{{input.company_name}}", "person_company_website": "{{input.company_domain}}", "tags": ["floqer", "inbound"], "do_not_contact": false, "owner_id": "12345" } } Field-by-field: - email_address Required, and the upsert key. - job_seniority One of `director`, `executive`, `individual_contributor`, `manager`, `vice_president`, `unknown`. - tags A string array, or a comma-separated string. - person_stage_id / owner_id / account_id Numeric Salesloft IDs — pass them as quoted strings. - do_not_contact Setting `true` removes the person from every active cadence in Salesloft. 4. KEY NOTES - Numeric fields (`person_stage_id`, `owner_id`, `account_id`) must be passed as quoted strings. Configure Action ignores raw JSON numbers and emits an `unknown_field` warning. - `do_not_contact: true` is destructive on the Salesloft side — it pulls the person out of every cadence they are currently in. - `upsert_type` tells you which path ran (`create` or `update`); branch on it with `run_if` when you only want to act on new people. - `person_details` is an object output. Reach into it from a `formula` with the bracket form, e.g. `{{salesloft_upsert_person_01ab.person_details}}?.["id"]`. - `job_seniority` values outside the accepted set are rejected by Salesloft rather than coerced. 5. WHERE IT FITS IN A WORKFLOW Pattern: enrich_person_linkedin_profile -> person_work_email_waterfall -> salesloft_upsert_person -> formula (extract person id) -> salesloft_add_person_to_cadence. 6. WHEN TO USE Use salesloft_upsert_person to keep Salesloft people in sync with enriched Floqer rows without needing a separate lookup-then-create branch. 7. WHEN NOT TO USE Need the record in Outreach instead -> action-detail/outreach_create_prospect.txt The person already exists and you only need to sequence them -> action-detail/salesloft_add_person_to_cadence.txt Last updated: 2026-08-03.