Skip to integration content

How to integrate Unify with Google BigQuery

To integrate Unify with Google BigQuery, send a Play webhook to an authenticated receiver that validates and stores the handoff before writing rows through BigQuery’s tabledata.insertAll API. The worker manages Google authorization and checks insertErrors for individual rows. A successful HTTP response alone is insufficient evidence that every row was accepted.[1][3]

By UnifyDocumentation reviewed
Connection
Via webhook + endpoint
Data storage
Tool
Google BigQuery
Receiver → BigQuery table
Data flow
Unify → Custom receiver → Google BigQuery
JSON payload

At a glance

  1. Define the decision the dataset should support
  2. Choose what one row represents
  3. Track accepted jobs and row-level write results

When this workflow makes sense

Start with the decision your team needs to make, then choose the connection that supports it.

The first analytical decision is what a row represents. If the table records handoffs, the same prospect can legitimately appear more than once. If it represents a current population, repeated delivery should not inflate the count. Write that definition down before connecting a dashboard, then make ingestion and reconciliation follow it.

A good fit when

Teams already operating BigQuery with an owner for ingestion, schema changes, and analytical definitions.

Reconsider the plan when

A spreadsheet or operational queue may be simpler when the only goal is reviewing a small set of prospects manually.

Design the handoff

Use this framework to agree on the input, the next action, and who owns the result.

Suggested workflow design, based on the documented capabilities below.

StageDecision to make
QuestionDefine the decision the dataset should support
GrainChoose what one row represents
IngestionTrack accepted jobs and row-level write results
ReconciliationCompare expected and stored records before reporting

Explore the scenarios

Choose the situation that fits your team and work through the proposed plan.

Open a scenario to explore its plan. Checklists track your selections in this page only.

Analyze a selected prospect group

An analyst wants a stable dataset for a defined selection.

The decision that matters

Define the population and row grain before calculating counts.

  1. Choose the selection rule
  2. Map a small controlled sample
  3. Reconcile stored rows with expected identities
Your validation checklist
0 of 3 checks marked by you
Recover a rejected row

A batch contains a record that fails schema validation.

The decision that matters

Retry the rejected work without losing successful-row identity.

  1. Inspect row-level errors
  2. Correct the invalid value
  3. Reconcile the retry with the job ledger
Your validation checklist
0 of 3 checks marked by you

Illustrative workflow, not a preconfigured automation. Complete these checks in your own account.

Connect your tools to Unify

Set up your integration or walk through it with our team

Define success before launch

Inspect the data and the intended outcome separately. Connection status is only the first check.

Expected, not tested

The intended table contains the expected records under the chosen row-identity policy.

Check row-level responses and reconcile stored rows with accepted receiver jobs. Confirm that a controlled repeat does not distort the analytical question.

Documentation-based reference. This workflow has not been tested end to end. Use a record or event you control before enabling live activity.

Questions answered

Common decisions when connecting Unify and Google BigQuery.

Does BigQuery receive the raw Play body directly?

This design uses a receiver to transform it into a schema-matched API request.[3]

Why acknowledge before writing the warehouse rows?

Unify has an 8-second request timeout. The proposed receiver durably stores accepted work before acknowledging it.[2]

Does HTTP success mean every row succeeded?

Inspect insertErrors for row-level failures.[3]

Is insertId an exactly-once guarantee?

No. Its documented deduplication is best effort.[3]

Can a BigQuery query result feed the same Play?

Unify does not pass webhook response bodies to later Play steps.[2]

Limits & decisions

Check these boundaries before designing a live workflow around the connection.

  • Requires implemented receiver, durable storage, and worker logic
  • The table schema and row identity must be designed for the workload
  • No exactly-once delivery or native bidirectional sync is claimed
  • No Google credentials, table, insert, or query was created or executed

What the connection supports

Understand the connection, the data involved, and the behavior that matters for a Unify + Google BigQuery workflow.

Connection flowVia webhook + endpoint
A handoff with explicit ownership

Validate input, then write and reconcile table rows

Documented behavior at a glance
DecisionWhat to know
Writetabledata.insertAll accepts rows with json objects[3]
ErrorsinsertErrors identifies failed rows by index[3]
AccessThe worker uses Google authorization[4]

Technical setup reference

References and requirements for the Google BigQuery connection.

Connection requirements and setup checklist

Before connecting

  • A Unify Play with a Webhook action
  • An owned HTTPS receiver with validation and durable job storage
  • A controlled test record and a policy for repeat delivery
  • A BigQuery project, dataset, and existing table schema
  • A Google-authorized worker with the required table and dataset permissions
  • A defined row identity and replay policy
  1. Define what one row means

    Choose between a handoff event and a current prospect snapshot. Create the intended schema separately and map only the fields needed for the analysis.[3]

  2. Authorize the worker

    Use Google credentials in the server environment. The API documents bigquery.tables.updateData, bigquery.tables.get, and bigquery.datasets.get permissions.[3][4]

  3. Construct the destination write

    Call POST https://bigquery.googleapis.com/bigquery/v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll with rows containing json objects that match the schema.[3]

  4. Configure the outbound request

    Use the method, endpoint, authentication, and JSON body below in the Play. Map only available fields and inspect Expand preview. The receiver must acknowledge within 8 seconds; Unify does not pass the response body into later Play steps.[1][2]

  5. Reconcile row-level outcomes

    Inspect insertErrors and its row indices. Record which rows need correction or retry. Keep application-level identity: insertId provides only best-effort deduplication and is not recommended as a strong guarantee.[3][4]

Request configuration

Method
POST
URL pattern
https://YOUR_APP.vercel.app/api/unify-to-bigquery
Headers
Content-Type: application/json
X-Unify-Webhook-Key: YOUR_WEBHOOK_SECRET
Authentication
Validate a custom X-Unify-Webhook-Key header in your receiver. This is an example contract you implement. Keep destination credentials and token renewal in the worker.

Choose JSON as the body format. Unify sets Content-Type automatically. The receiver must respond within Unify’s 8-second timeout; request responses are not passed to later Play steps.[2]

Replace URL placeholders with the actual receiver URL from your account or deployed application. These example URLs are not working endpoints.

Example handoff payload

Start with a fictional prospect. Validate the resolved values before using a real record.

Inspect the sample payload and field mapping
Example request body
{
  "event": "prospect_handoff",
  "prospect_name": "Alex Morgan",
  "prospect_email": "alex@example.com",
  "company_name": "Example Company",
  "company_domain": "example.com"
}

Fictional data. Replace sample values before using a real Play.

The keys are an example handoff format, not required Unify field names. Use the field mapping to distinguish record data from fixed settings. Select available fields in your Play and inspect Expand preview; do not replace configuration values with prospect data.[2]

Payload fieldValue to send
eventA fixed label you choose for this workflow
prospect_nameUse {{ person.first_name }} and {{ person.last_name }} for the prospect name
prospect_emailUse {{ person.email }}; decide how to handle missing values
company_nameUse {{ company.name }}
company_domainUse {{ company.domain }}

The sample prospect object is receiver input. The worker converts it into {"rows":[{"json":{...}}]} using actual schema names and types. Credentials, table selection, and internal receipt metadata belong to the worker.

Troubleshooting

Start with the stage where the expected data or action stops appearing.

Only some rows appear

Inspect insertErrors and row indices, then validate schema and values for the rejected rows.[3]

Authorization fails

Check the worker identity and the documented table and dataset permissions.[3][4]

Counts increase on replay

Review the row grain and application deduplication policy; best-effort insertion IDs are not an exactly-once contract.[3]

Sources & review

Official documentation reviewed on September 15, 2026.

Technical claims link to primary documentation from Unify and the destination tool. Scenarios, field choices, and recovery plans are editorial implementation examples. Documentation review is separate from execution testing.

Documentation reviewed; end-to-end execution not tested. No named technical reviewer has signed off on these articles yet.

Content updated: . Report a correction to Unify with the tool name, source URL, and behavior you observed.

  1. [1] Unify: Webhook action
  2. [2] Unify: Webhooks in Plays
  3. [3] Google BigQuery: tabledata.insertAll
  4. [4] Google BigQuery: Write data with the REST API

Get started with Unify

Create your account or book a demo with our team