Syncing contacts from Google Cloud Storage to Salesforce

Code

Set your Polytomic API key as an environment variable:

export POLYTOMIC_API_KEY=YOUR-API-TOKEN

This example covers five steps:

  1. Create a Salesforce connection.
  2. Create a Google Cloud Storage connection.
  3. Verify the connections are ready.
  4. Create a model over a Google Cloud Storage CSV file.
  5. Sync the model to Salesforce Contacts.

1. Create a Salesforce Connection

The following request creates a Salesforce Connection through the Create Connection endpoint. For end-user onboarding, prefer Polytomic Connect’s embedded auth.

curl --request POST \
--url https://app.polytomic.com/api/connections \
--header "accept: application/json" \
--header "content-type: application/json" \
--header "X-Polytomic-Version: 2025-09-18" \
--header "Authorization: Bearer ${POLYTOMIC_API_KEY}" \
-d '{"name": "Salesforce Connection","type": "salesforce", "configuration": {"domain": "https://example.my.salesforce.com"}}'

Salesforce Connections authenticate with OAuth. Open the URL returned in the auth_url field of the response to complete the flow.

OAuth redirection

By default, the API expects auth_url to open in a new browser window. Set the optional redirect_url parameter in the request body to change the redirect target.

2. Create a Google Cloud Storage Connection

The following request creates a Google Cloud Storage Connection.

curl --request POST \
--url https://app.polytomic.com/api/connections \
--header "accept: application/json" \
--header "content-type: application/json" \
--header "X-Polytomic-Version: 2025-09-18" \
--header "Authorization: Bearer ${POLYTOMIC_API_KEY}" \
-d '{"name": "Google Cloud Storage Connection","type": "gcs", "configuration": { "service_account": "service_account_json_key", "bucket": "gcs://mybucket/mypath"}}'

3. Verify Connection readiness

Before syncing, poll the Get Schema Status endpoint for each Connection ID until cache_status is true. Once it is, the Connection’s schema is ready to query.

4. Create a source model over the GCS CSV

Next, create a model over a CSV file in Google Cloud Storage (GCS). A model is a view — a collection of fields you can sync to other systems in whole or in part.

Call the Create Model endpoint to expose every column in high_paying_users.csv:

curl --request POST \
--url https://app.polytomic.com/api/models \
--header "accept: application/json" \
--header "content-type: application/json" \
--header "X-Polytomic-Version: 2025-09-18" \
--header "Authorization: Bearer ${POLYTOMIC_API_KEY}" \
-d '{
"name": "GCS Contacts",
"configuration": {
"model_from": "single_file",
"key": "high_paying_users.csv"
},
"connection_id": "YOUR_GCS_CONNECTION_ID"
}'

5. Sync the GCS model to Salesforce Contacts

The sync maps email on the GCS model to the Email field on Salesforce Contacts, and also maps first_name and last_name. Add more entries to the fields array to sync additional columns.

Listing target objects

To discover the target objects available on a destination, use the Get Sync Target Objects endpoint.

Creating the sync

Create the sync with the Create Sync endpoint.

curl --request POST \
--url https://app.polytomic.com/api/syncs \
--header "accept: application/json" \
--header "content-type: application/json" \
--header "X-Polytomic-Version: 2025-09-18" \
--header "Authorization: Bearer ${POLYTOMIC_API_KEY}" \
-d '{
"name": "GCS to Salesforce Sync",
"mode": "updateOrCreate",
"identity": {
"source": {
"field": "email",
"model_id": "YOUR_MODEL_ID"
},
"target": "Email",
"function": "Equality"
},
"fields": [
{
"source": {
"field": "first_name",
"model_id": "YOUR_MODEL_ID"
},
"target": "FirstName"
},
{
"source": {
"field": "last_name",
"model_id": "YOUR_MODEL_ID"
},
"target": "LastName"
}
],
"schedule": {
"frequency": "manual"
},
"target": {
"connection_id": "YOUR_SALESFORCE_CONNECTION_ID",
"object": "Contact"
}
}'