Skip to main content
Each sync connection has one config: its field mapping, its transforms, and its filters. To edit that config as JSON, open the JSON view on the connection’s Setup tab. Transforms and extra filters have no visual editor, so you edit them here.

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.
Autocomplete lists the connection’s tables and fields. Beside the editor, the Reference tab describes the transforms and filters, and Insert example adds one. The Problems tab lists each problem with its line.

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 in mapping reads "<object>/<table>":
  • <object> is a Steerco object key from the next table, or object:<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.
Each value maps Steerco field keys to the table’s columns: { "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.
Lookup matches ignore case, except the 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:
This matches on two columns:

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 whose stream 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, accountId or accountIds, 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.
A filter on the table mapped to 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:
  1. Mapping. Each Steerco field copies its source column. The source columns stay on the row, so later steps can read either name.
  2. Transforms. The transforms whose stream names this table run in list order. Each one can read the columns an earlier one produced.
  3. Mapping again. A Steerco field that reads a transform’s output gets its value, if step 1 couldn’t set it.
  4. Filters. The filters whose stream names this table run in list order.
  5. Company scope. If filters on accounts narrowed the companies, rows linked to other companies drop out.
Before these steps, Steerco prepares each table that a transform looks up. After them, Steerco loads the rows into your records, or into staging when staging is on.
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.