Publish / saas · All operations
Write to an application's API
Write to a SaaS application API.
Status
- In arcform
Not built yet
arcform does not do this yet. Its place on the roadmap
- Shape of the result
- the table sent out, with nothing new to look at
- Level
- needs an arcform operator
Variants
- Delete records in an application
Remove the application's records that match the input rows' keys.
- Update or upsert records in an application
Change the application's existing records matched by key, or create them where none match.
Create records in an application
Send the rows to an application's API as new records, tickets, events or list entries.
Publish a dataset to an analytics service
Publish or refresh the whole result as a dataset or data source on a hosted analytics or reporting service.
What other tools call it
Meridian's classification; an independent blind rating agreed on 86.2% of 312 rows (exact class, version 2).
Alteryx Designer (4)
Auto Insights Uploaderread 2026-09-27Load a copy of the workflow's output into Alteryx Auto Insights
BI platform output connectors (family)read 2026-09-273 tools: Microsoft Power BI Output, Tableau Output, Publish to Tableau Server (deprecated)
Machine Learning Sendread 2026-09-27Create or update a project in Alteryx Machine Learning from workflow data
SaaS application output connectors (family)read 2026-09-276 tools, one per application: Salesforce Output, Marketo Output, Dataverse Output, Dynamics CRM Output, ...
Apache Hop (4)
Salesforce Deleteread 2026-09-27Delete records from a Salesforce object
Salesforce Insertread 2026-09-27Insert records into a Salesforce object
Salesforce Updateread 2026-09-27Update records in a Salesforce object
Salesforce Upsertread 2026-09-27Insert or update records in a Salesforce object by key
Apache NiFi (2)
SaaS application write processors (family)read 2026-09-272 processors, PutSalesforceObject, PutZendeskTicket
ZendeskRecordSinkread 2026-09-27Record sink: create Zendesk tickets from records
Azure Data Factory (1)
Copy activity sink data stores: Services and apps (family)read 2026-09-276 data stores usable as copy sink: Dataverse, Dynamics 365, Dynamics CRM, Salesforce, …
Bruin (6)
Reverse ETL destinationsread 2026-09-27Push warehouse rows to an operational API as record operations: HubSpot, CleverTap
appendread 2026-09-27Always create a new remote record
deleteread 2026-09-27Remove matching remote records, soft or hard per destination
mergeread 2026-09-27Upsert: update the matching remote record or create it
replaceread 2026-09-27Mirror: upsert every source row, then remove remote records absent from the source
updateread 2026-09-27Update matching remote records only; unmatched rows are rejected
Duckle (2)
DHIS2read 2026-09-25write to DHIS2 through DHIS2 Web API from Rust
SaaS Connectors sinks outside DuckDB (family)read 2026-09-253 components, one per system, run by Rust drivers and HTTP clients, outside DuckDB: salesforce, sharepoint, salesforce.bulk
EasyMorph (10)
Export to Airtableread 2026-09-27Write the table to a table of an Airtable base
Export to Power BIread 2026-09-27Push the table to a Power BI push dataset
Export to Salesforceread 2026-09-27Insert the table's rows as records of a Salesforce object
Export to SharePoint listread 2026-09-27Append the table's rows to a SharePoint list
Export to Tableauread 2026-09-27Write the table to a Tableau Hyper or TDE file, or publish it to Tableau Server or Online
Jira commandread 2026-09-27Perform a Jira command
Update/delete records in Salesforceread 2026-09-27Update or delete records of a Salesforce object (paid editions only)
Update/delete rows in Airtableread 2026-09-27Update or delete rows of an Airtable table (paid editions only)
Update/delete rows in SharePoint listread 2026-09-27Update or delete rows of a SharePoint list (paid editions only)
Zendesk commandread 2026-09-27Create, update or delete Zendesk tickets
KNIME Analytics Platform (1)
KNIME Power BI Integration (extension)read 2026-09-27Extension outside the base install: 3 current nodes: Power BI Model Reader; Power BI Model Refresher; Send to Power BI
OpenRefine (1)
Upload edits to Wikidataread 2026-09-27Create or update Wikidata statements and terms from the rows, under a logged-in account
Pentaho Data Integration (6)
OpenERP object delete (deprecated)read 2026-09-27Deprecated: delete records on an OpenERP server over XML-RPC
OpenERP object output (deprecated)read 2026-09-27Deprecated: update records on an OpenERP server over XML-RPC
Salesforce Deleteread 2026-09-27Delete records from a Salesforce module
Salesforce Insertread 2026-09-27Insert records into a Salesforce module
Salesforce Updateread 2026-09-27Update records in a Salesforce module
Salesforce Upsertread 2026-09-27Insert or update records in a Salesforce module
RapidMiner Studio (5)
Delete Data Sourceread 2026-09-27Delete a data source from a Tableau Server
Delete Salesforceread 2026-09-27Delete Salesforce records identified by the input rows
Update Salesforceread 2026-09-27Update Salesforce records from the input rows
Upload Data Sourceread 2026-09-27Publish a .hyper extract as a data source on a Tableau Server
Write Salesforceread 2026-09-27Create Salesforce records from the input rows
Tableau Prep (3)
CRM Analyticsread 2026-09-27Write the result to a dataset in Salesforce CRM Analytics
Data Cloudread 2026-09-27Write the result to Salesforce Data Cloud through the Ingestion API
Published data sourceread 2026-09-27Publish the result as a data source on Tableau Server or Tableau Cloud
Talend (8)
Application output components (family)read 2026-09-2723 components writing to a business application: tSalesforceOutput, tSAPIDocOutput, tMarketoOutput, tZendeskOutput
tDSDelete / tDataStewardshipTaskDeleteread 2026-09-27Delete tasks held in Talend Data Stewardship campaigns
tDSOutput / tDataStewardshipTaskOutputread 2026-09-27Load rows as tasks into Talend Data Stewardship campaigns
tDatasetOutputread 2026-09-27Write rows as a dataset in Talend Data Preparation
tMarketoListOperationread 2026-09-27Add leads to or remove them from a Marketo list, or check that leads are in it
tQlikOutputread 2026-09-27Create, overwrite or delete data files in Qlik Cloud
tSplunkEventCollectorread 2026-09-27Send event data to Splunk through the HTTP Event Collector
tTableauOutputread 2026-09-27Write rows to a data source on a Tableau server
Background
Bruin can push rows out of the warehouse and into an operational tool, such as a marketing app, through that tool's application programming interface (API).[1] In Bruin, each source row becomes a remote record operation rather than a row in a table, and the warehouse stays the source of truth.[1] The dlt library's destination decorator hands all the data passing through a pipeline to a function, which suits pushing data back to an API.[2]
When to use it
In Bruin, writes to an application's API are not transactional: a run that fails partway may already have written some records, and Bruin cannot roll them back.[1] Plan every write to an application for a run that stops halfway, and know before the first run how you would find the records it has already written. (Meridian's view) In Bruin, the target API decides which write strategies work and which fields a record can be matched on.[1] Bruin's append strategy always creates a new record, so re-running it duplicates rows unless each run is scoped to new rows.[1] When rows are meant to be created once, give each run only the rows the application has not yet seen. (Meridian's view)
In the Hypertext Transfer Protocol (HTTP), status code 429 Too Many Requests means the user has sent too many requests in a given amount of time.[3] An HTTP 429 response may include a Retry-After header saying how long to wait before making a new request.[3] Bruin sends rows in bulk through the API's batch endpoints, within the API's rate limits.[1] In Bruin, the default reject mode, fail, sends every valid row and then fails the run, listing the rows the API rejected.[1] In Bruin, systemic failures such as failed authentication or a malformed request always abort the run, whatever the reject mode.[1] Read the rejected rows after every run, and decide for each one whether the row or the target needs fixing. (Meridian's view)
EasyMorph's Export to Power BI action appends rows to a push dataset in the Power BI service, and the limitations of the service's API apply.[4] When Tableau Prep Builder publishes to a data source it published before, it refreshes the data source and keeps its data modelling, such as calculated fields.[5] If Tableau Prep Builder cannot refresh a published data source, it replaces the data source, data modelling included.[5] Before publishing a result to an analytics service, find out whether a run adds rows, refreshes the dataset in place or replaces it. (Meridian's view)
The method
Create, read, update and delete (CRUD) are the four basic operations of persistent storage.[6] The term CRUD was likely first popularised in 1983 by James Martin in his book Managing the data-base environment.[6] In databases, each CRUD letter can be mapped to a standard Structured Query Language (SQL) statement: INSERT, SELECT, UPDATE and DELETE.[6] In APIs built on representational state transfer (REST), each CRUD letter may be mapped to an HTTP method: POST to create, GET to read, PUT to replace or PATCH to modify, and DELETE to delete.[6] In HTTP, POST is not limited to creating resources and may also be used for process-oriented operations that go beyond CRUD.[6]
HTTP calls a request method idempotent when several identical requests with it have the same intended effect on the server as a single such request.[7] Of the request methods HTTP defines, PUT and DELETE are among those that are idempotent.[7] An HTTP client can retry an idempotent request after a lost connection, knowing the repeat has the same intended effect even if the original request succeeded.[7] An HTTP client should not automatically retry a request with a non-idempotent method unless it knows the request is in fact idempotent or that the original request was never applied.[7] Guard the writes that create records most carefully, and prefer a write that updates a record matched on a unique key wherever the application offers one. (Meridian's view)
With the @dlt.destination decorator, any function that takes two arguments becomes a dlt destination.[2] The batch_size argument of dlt's destination decorator sets how many items are batched together and sent in each call of the function.[2] In dlt, a destination function that raises an exception is retried 5 times before dlt gives up.[2] When a failed dlt run is repeated, the destination restarts from the whole batch that failed, so part of a batch committed before the failure can be duplicated.[2] For systems that are not transactional and do not tolerate duplicated data, a dlt destination can use a batch of size 1.[2] dlt's max_parallel_load_jobs argument sets how many load jobs run in parallel, for example for a destination that allows only five connections at a time.[2]
Bruin names five write strategies: merge (update the matching record or create it), update, append, delete and replace.[1] In Bruin, merge, update and delete need two things to find an existing record: a field on the destination side to match on, and a source column holding the value.[1] In Bruin, a source row usually affects a single remote record, but matching on a non-unique field can update or delete every record that matches.[1] Match on a field the application keeps unique, and try the match on a handful of rows before a full run. (Meridian's view)
Compared with the alternatives
In Bruin, a warehouse destination stages data, runs SQL and swaps tables, while a destination that writes to an application's API has no staging table, no SQL and no atomic swap.[1]
Sources
- [1]Reverse ETL | Bruin CLIdocumentation
- [2]Reverse ETL | dlt Docsdocumentation
- [3]Additional HTTP Status Codesstandard
- [4]EXPORT TO POWER BI [EasyMorph Help]documentation
- [5]Save and Share Tableau Prep Work - Tableaudocumentation
- [6]Create, read, update and delete - Wikipediasecondary source
- [7]RFC 9110: HTTP Semanticsstandard