Open the JSON editor
1
Open the connection
On the connector’s manage page, click the Setup tab.
2
Switch to JSON
In the toolbar, click JSON.
3
Edit and save
Change the config, then click Save in the bar at the bottom of the page.
Document shape
A connection’s config has three keys:
In this example, the transform copies each asset’s product name, and the filter keeps customer and partner companies. The config, each transform, and each filter accept only the keys this page lists. An unknown key is a problem.
Mapping
Each key inmapping reads "<object>/<table>":
<object>is a Steerco object key from the next table, orobject:<slug>for a custom object.<table>is the tool’s table name, as the table picker shows it.- A second table for the same object takes a number, such as
activities_2/Event.
{ "steercoField": "sourceColumn" }. A column can be a dotted path into a JSON column, such as properties.industry. It can also name a column that a transform produces, such as product_name above.
An object’s required fields must be mapped. To add a Steerco field, use Settings > Data configuration.
Transforms
Every transform takes these keys:
If a transform can’t find the table it reads from, or a column it matches on, Steerco skips the transform and logs a warning.
Lookup tables
enrich, array_lookup, and embed read rows from another table. You name that table in from.stream, lookup.stream, or a join’s stream:
- A table name, such as
User, reads the table’s own columns. Saving the config adds the table to the sync, even when no object maps it. - An object key this connection maps, such as
users, reads that object’s rows after mapping. The rows carry the source columns and the Steerco field keys. - A table another sync connection maps, such as Zendesk reading Salesforce’s
Account. The other connection must sync that table and have synced at least once, because Steerco reads its last copy.
key match in embed. A whole number stored as a decimal, such as 12345.0, matches 12345.
enrich
Copies fields from a matching row in another table. It matches on one column, or on several.
Use
key with from.key, or from.match, but not both. A row with no match gets an empty value in each copied column. A copied column replaces a column of the same name. In a match on several columns, a lookup row with an empty match column is skipped.
This copies each Salesforce user’s email and name onto the companies they own. A mapping can then read owner_email:
array_lookup
Turns a list of IDs into values from another table.
The
field value can be a list or a JSON array, such as [1, 2]. It can also be text split by semicolons, such as a;b, or a single value. A row with no matches gets an empty value.
This turns a call’s participant emails into contact IDs, which a mapping can then read with "contactIds": "participant_contact_ids":
embed
Nests related rows, like ticket comments, inside each record.
Each record gets a list of its child rows. A record with no child rows gets an empty value. The match on
key is exact, including case.
Each item in joins takes these keys:
When you set
from.fields, list each join’s new column there too, or Steerco drops it.
This nests each Zendesk ticket’s comments, with each author’s name, in ticket_comments:
derive
Sets a value from rules: map values, match a prefix, or extract with a regular expression.
Each rule takes these keys:
A rule takes
regex or prefix_match, not both. A rule with neither returns the source as text. When no rule returns a value, the column is empty.
This sets segment from the segment code. When the code is empty or unknown, it reads a tag in the description, then checks the company type:
Filters
Every filter takes these keys:
If the field isn’t on the table, the filter has no effect.
Company scope
A filter whosestream is accounts, or the table mapped to it, such as Account, also decides which companies sync. The company filter on the Setup tab saves its choice on accounts. After the filters run, other objects keep only rows linked to a kept company:
- An object with a company column,
accountIdoraccountIds, keeps rows linked to a kept company. A row linked to no company is dropped. - An object with only an opportunity column,
opportunityId, keeps rows whose opportunity belongs to a kept company. Opportunity Items work this way. - Custom objects aren’t scoped.
accounts sets the scope the same way as one on accounts. A filter on any other table limits only that table. The scope reads company rows before this run’s transforms, so test a source column or a Steerco field key there.
When exclude_all is the only filter on accounts, no company syncs, and neither does anything linked to one.
Processing order
For each table that syncs, Steerco runs these steps in order:- Mapping. Each Steerco field copies its source column. The source columns stay on the row, so later steps can read either name.
- Transforms. The transforms whose
streamnames this table run in list order. Each one can read the columns an earlier one produced. - Mapping again. A Steerco field that reads a transform’s output gets its value, if step 1 couldn’t set it.
- Filters. The filters whose
streamnames this table run in list order. - Company scope. If filters on
accountsnarrowed the companies, rows linked to other companies drop out.
Step 3 only sets Steerco fields that step 1 couldn’t. If a transform changes a column that step 1 already mapped, the Steerco field keeps the value from before the transform. To map a transform’s result, write it to a new column and map that column.

