Cross-Provider Workflow

HubSpot Contact Multi-List Sync

Version 1.0.0

Create a HubSpot contact, then sync to both Mailchimp and SendGrid lists.

1 workflow 3 source APIs 3 providers
View Spec View on GitHub ArazzoWorkflowsCross-Provider

Providers Orchestrated

hubspot mailchimp sendgrid

Workflows

hubspot-contact-fan-out
Create a HubSpot contact, then sync to Mailchimp and SendGrid.
Creates a HubSpot contact, subscribes the same email to a Mailchimp audience, and upserts the contact into a SendGrid Marketing Contacts list, keeping all three platforms in sync from one CRM action.
3 steps inputs: email, firstName, lastName, mailchimpListId, sendgridListId outputs: contactId, mailchimpMemberId, sendgridJobId
1
create-contact
$sourceDescriptions.hubspotContactsApi.createContact
Create the contact record in HubSpot CRM.
2
sync-mailchimp
$sourceDescriptions.mailchimpMarketingApi.postListsIdMembers
Subscribe the contact to a Mailchimp audience list.
3
sync-sendgrid
$sourceDescriptions.sendgridContactsApi.UpdateContact
Upsert the contact into a SendGrid Marketing Contacts list.

Source API Descriptions

Arazzo Workflow Specification

crm-hubspot-contact-multi-list-sync-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: HubSpot Contact Multi-List Sync
  summary: Create a HubSpot contact, then sync to both Mailchimp and SendGrid lists.
  description: >-
    A cross-provider workflow that creates a contact in HubSpot and fans the
    same person out to two separate email marketing audiences — a Mailchimp
    audience list and a SendGrid Marketing Contacts list. Demonstrates keeping a
    single CRM record of truth synchronized across multiple email platforms.
  version: 1.0.0
sourceDescriptions:
  - name: hubspotContactsApi
    url: https://raw.githubusercontent.com/api-evangelist/hubspot/refs/heads/main/openapi/hubspot-crm-contacts-api-openapi.yml
    type: openapi
  - name: mailchimpMarketingApi
    url: https://raw.githubusercontent.com/api-evangelist/mailchimp/refs/heads/main/openapi/mailchimp-marketing-api-openapi.yml
    type: openapi
  - name: sendgridContactsApi
    url: https://raw.githubusercontent.com/api-evangelist/sendgrid/refs/heads/main/openapi/tsg_mc_contacts_v3.yaml
    type: openapi
workflows:
  - workflowId: hubspot-contact-fan-out
    summary: Create a HubSpot contact, then sync to Mailchimp and SendGrid.
    description: >-
      Creates a HubSpot contact, subscribes the same email to a Mailchimp
      audience, and upserts the contact into a SendGrid Marketing Contacts list,
      keeping all three platforms in sync from one CRM action.
    inputs:
      type: object
      properties:
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        mailchimpListId:
          type: string
        sendgridListId:
          type: string
    steps:
      - stepId: create-contact
        description: Create the contact record in HubSpot CRM.
        operationId: $sourceDescriptions.hubspotContactsApi.createContact
        requestBody:
          contentType: application/json
          payload:
            properties:
              email: $inputs.email
              firstname: $inputs.firstName
              lastname: $inputs.lastName
        successCriteria:
          - condition: $statusCode == 201
        outputs:
          contactId: $response.body#/id
      - stepId: sync-mailchimp
        description: Subscribe the contact to a Mailchimp audience list.
        operationId: $sourceDescriptions.mailchimpMarketingApi.postListsIdMembers
        parameters:
          - name: list_id
            in: path
            value: $inputs.mailchimpListId
        requestBody:
          contentType: application/json
          payload:
            email_address: $inputs.email
            status: subscribed
            merge_fields:
              FNAME: $inputs.firstName
              LNAME: $inputs.lastName
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          mailchimpMemberId: $response.body#/id
      - stepId: sync-sendgrid
        description: Upsert the contact into a SendGrid Marketing Contacts list.
        operationId: $sourceDescriptions.sendgridContactsApi.UpdateContact
        requestBody:
          contentType: application/json
          payload:
            list_ids:
              - $inputs.sendgridListId
            contacts:
              - email: $inputs.email
                first_name: $inputs.firstName
                last_name: $inputs.lastName
        successCriteria:
          - condition: $statusCode == 202
        outputs:
          sendgridJobId: $response.body#/job_id
    outputs:
      contactId: $steps.create-contact.outputs.contactId
      mailchimpMemberId: $steps.sync-mailchimp.outputs.mailchimpMemberId
      sendgridJobId: $steps.sync-sendgrid.outputs.sendgridJobId