Destination type

Google Sheet Destination

Use Google Sheet destinations to append routed webhook events into a spreadsheet for operations, lightweight audits, manual review, support workflows, or handoff to non-engineering teams.

GOOGLE_SHEETGoogle Sheets append row APIPOSTGoogle Workspace
Google Sheet destination delivery flowFastHook routes accepted events through a connection to a Google Sheet destination and stores delivery attempt evidence.AcceptedRequestsource verifiedConnectionRoute branchfilters and transformsretry policyGOOGLE_SHEETGoogle SheetGoogle Sheets append row APIPOSTAttemptEvidencestatus + bodyDestination config owns target, auth, method, rate limit, disabled state, and delivery attempt evidence.
For Google Sheet destinations, FastHook turns each routed event into an append-row request and stores the Google API response as delivery attempt evidence.

When to use this destination type

Choose GOOGLE_SHEET when the receiver target is Google Sheets append row API. Destinations are outbound delivery targets: they do not decide whether a source request should be accepted, and they do not own connection filters or transformations. They own where the final delivery goes and how FastHook should authenticate, pace, disable, and inspect that delivery.

A destination can be reused by multiple connections when several source branches should feed the same receiver. Reuse keeps receiver capacity, credentials, and attempt evidence attached to one destination id.

FastHook dashboard fields

In the dashboard, create a destination, set Destination Type to GOOGLE_SHEET, then fill the fields below.

Spreadsheet ID

The ID from the Google Sheet URL.

Sheet name

The tab that receives rows. Defaults to Sheet1.

Value input option

RAW for literal values or USER_ENTERED for Sheets parsing.

Columns

Optional dotted paths such as payload.customer.email or metadata.event_id.

Include metadata

Adds delivery metadata when explicit columns are not set.

Auth type

OAuth refresh token or service account credentials.

API config fields

The REST API stores destination-specific behavior under config. Use PATCH for focused edits and PUT only when your request contains the full config you want to keep.

config.spreadsheet_id

Google Spreadsheet ID that receives appended rows.

config.sheet_name

Sheet tab name. Defaults to Sheet1.

config.range

A1 range derived from the sheet name, usually Sheet1!A:Z or a quoted tab name.

config.value_input_option

RAW or USER_ENTERED. RAW is used when metadata mode is enabled.

config.columns

Optional ordered list of dotted payload or metadata paths to write as columns.

config.include_metadata

Whether FastHook writes metadata columns when explicit columns are not configured.

config.insert_data_option

INSERT_ROWS for append-style writes.

config.auth_type

GOOGLE_OAUTH_REFRESH_TOKEN or GOOGLE_SERVICE_ACCOUNT.

config.auth

OAuth client credentials and refresh token, or service account email and private key.

Google Sheet destination config
{
  "name": "ops-events-sheet",
  "type": "GOOGLE_SHEET",
  "config": {
    "spreadsheet_id": "1abcExampleSpreadsheetId",
    "sheet_name": "Webhook events",
    "range": "'Webhook events'!A:Z",
    "value_input_option": "RAW",
    "insert_data_option": "INSERT_ROWS",
    "columns": [
      "event_id",
      "payload.customer.email",
      "payload.order.total"
    ],
    "include_metadata": false,
    "auth_type": "GOOGLE_OAUTH_REFRESH_TOKEN",
    "auth": {
      "client_id": "google-client-id",
      "client_secret": "google-client-secret",
      "refresh_token": "google-refresh-token"
    },
    "rate_limit": 1,
    "rate_limit_period": "second"
  }
}
Create Google Sheet destination with cURL
curl -X POST "https://api.fasthook.io/v1/destinations" \
  -H "Authorization: Bearer $FASTHOOK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "ops-events-sheet",
  "type": "GOOGLE_SHEET",
  "config": {
    "spreadsheet_id": "1abcExampleSpreadsheetId",
    "sheet_name": "Webhook events",
    "range": "'Webhook events'!A:Z",
    "value_input_option": "RAW",
    "insert_data_option": "INSERT_ROWS",
    "columns": [
      "event_id",
      "payload.customer.email",
      "payload.order.total"
    ],
    "include_metadata": false,
    "auth_type": "GOOGLE_OAUTH_REFRESH_TOKEN",
    "auth": {
      "client_id": "google-client-id",
      "client_secret": "google-client-secret",
      "refresh_token": "google-refresh-token"
    },
    "rate_limit": 1,
    "rate_limit_period": "second"
  }
}'

Authentication

Destination authentication is outbound. It helps the receiver trust or accept FastHook delivery, and it is separate from source authentication that verifies the original webhook producer.

  • Google OAuth refresh token
  • Google service account

HTTP methods and rate limit

This destination type uses the methods below for delivery attempts. Rate limits apply at the destination boundary, so every connection that targets the same destination shares that capacity.

POST

Rate limit: Locked to 1 request per second.

Delivery behavior

  • FastHook appends rows instead of replacing existing sheet contents.
  • If columns are configured, FastHook writes values in that order and disables metadata mode.
  • If columns are empty and metadata is off, FastHook can spread payload values across columns for quick capture.
  • Google Sheet destinations are locked to 1 request per second to avoid write bursts.

Setup checklist

  1. Create a destination and choose GOOGLE_SHEET as the destination type.
  2. Paste the spreadsheet ID and choose the sheet tab.
  3. Choose OAuth or service account authentication and make sure that identity can edit the sheet.
  4. Optionally define columns with dotted payload or metadata paths.
  5. Connect sources through connections and inspect rows after a test delivery.

Troubleshooting

Saving fails because auth is missing.

Connect Google with OAuth2 or provide service account email and private key.

Rows do not appear.

Check spreadsheet_id, sheet_name, sharing permissions, and whether the target tab exists.

Columns are empty or shifted.

Confirm dotted paths match the delivered payload. If you set columns, include_metadata is disabled by design.

Related docs