Skip to content

Commit 10b6bb3

Browse files
authored
feat(google-appsheet): add Google AppSheet integration (#5376)
* feat(google-appsheet): add Google AppSheet integration - 4 tools (find/add/edit/delete rows) against the AppSheet Action API - API key auth via Application Access Key (no OAuth/scopes needed) - Block with operation dropdown, region selector, and Selector expression support - Generated docs * improvement(google-appsheet): harden response parsing, add wand config and skills - Guard against empty/non-JSON AppSheet response bodies (Delete may return no body) - Add wandConfig to the Selector field for AI-assisted expression generation - Add 3 skills grounded in attested AppSheet/Zapier automation patterns - Tighten json output descriptions to describe inner shape * fix(google-appsheet): validate region against allow-list, encode appId, validate rows shape - Reject unrecognized region values instead of interpolating them into the request host (a caller could otherwise redirect the Application Access Key to an arbitrary domain) - URL-encode appId, not just tableName, in the Action endpoint path - Reject non-array Rows input in tools.config.params instead of forwarding a single object to the AppSheet Action API - Drop the mismatched json-object generationType on the rows wand config (that enricher appends "must start with { and end with }", which conflicts with the JSON-array shape the field expects) - Add utils.test.ts covering region validation and response-body parsing * docs(google-appsheet): add manual intro/getting-started section Match the MANUAL-CONTENT convention used by other integration docs (Airtable, Ahrefs, Google PageSpeed) — an overview of the service, what the Sim integration lets agents do, and how to get an Application Access Key. * docs: sync generated integration docs with current source Regenerate docs for integrations whose tools/blocks changed upstream without a matching docs regen (ahrefs, algolia, amplitude, brex, clerk, gong, hex, langsmith, loops, onepassword, sendgrid, sharepoint, similarweb, supabase, tailscale, trello, vercel, wordpress), plus the integrations.json catalog.
1 parent 06dd811 commit 10b6bb3

36 files changed

Lines changed: 3788 additions & 143 deletions

apps/docs/components/icons.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,6 +1742,21 @@ export function AmplitudeIcon(props: SVGProps<SVGSVGElement>) {
17421742
)
17431743
}
17441744

1745+
export function GoogleAppsheetIcon(props: SVGProps<SVGSVGElement>) {
1746+
return (
1747+
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 35 36' fill='none'>
1748+
<path
1749+
fill='#0060d9'
1750+
d='m29.0098 6.30417h-7.6818l-3.0989 4.40413-1.8448 4.3641 4.9437.5578 5.1352-.5377 3.8117-6.59901c.5596-.97344-.1422-2.18932-1.2651-2.18932z'
1751+
/>
1752+
<g fill='#4285f4'>
1753+
<path d='m3.10253 8.49714 3.19192 5.47426c.39193.6708 1.10834 1.0846 1.8849 1.0846l8.20315.0164 4.9455-8.76823h-16.96584c-1.12656 0-1.82656 1.22135-1.25963 2.19297z' />
1754+
<path d='m18.0122 29.8453c-.556.9662-1.9469.9789-2.5175.0201l-3.1791-5.3375c-.4011-.6745-.412-1.5112-.0256-2.1948l4.0943-7.2625 10.0771.02z' />
1755+
</g>
1756+
</svg>
1757+
)
1758+
}
1759+
17451760
export function GoogleBooksIcon(props: SVGProps<SVGSVGElement>) {
17461761
return (
17471762
<svg {...props} xmlns='http://www.w3.org/2000/svg' viewBox='0 0 478.63 540.07'>

apps/docs/components/ui/icon-mapping.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ import {
7878
GmailIcon,
7979
GongIcon,
8080
GoogleAdsIcon,
81+
GoogleAppsheetIcon,
8182
GoogleBigQueryIcon,
8283
GoogleBooksIcon,
8384
GoogleCalendarIcon,
@@ -321,6 +322,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
321322
gmail_v2: GmailIcon,
322323
gong: GongIcon,
323324
google_ads: GoogleAdsIcon,
325+
google_appsheet: GoogleAppsheetIcon,
324326
google_bigquery: GoogleBigQueryIcon,
325327
google_books: GoogleBooksIcon,
326328
google_calendar: GoogleCalendarIcon,

apps/docs/content/docs/en/integrations/ahrefs.mdx

Lines changed: 111 additions & 58 deletions
Large diffs are not rendered by default.

apps/docs/content/docs/en/integrations/algolia.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ Perform batch add, update, partial update, or delete operations on records in an
235235
| `applicationId` | string | Yes | Algolia Application ID |
236236
| `apiKey` | string | Yes | Algolia Admin API Key |
237237
| `indexName` | string | Yes | Name of the Algolia index |
238-
| `requests` | json | Yes | Array of batch operations. Each item has "action" \(addObject, updateObject, partialUpdateObject, partialUpdateObjectNoCreate, deleteObject, delete, clear\) and "body" \(the record data, must include objectID for update/delete; omit body for delete/clear\) |
238+
| `requests` | json | Yes | Array of batch operations. Each item has "action" \(addObject, updateObject, partialUpdateObject, partialUpdateObjectNoCreate, deleteObject, delete, clear\) and "body" \(the record data; must include objectID for update/delete; use an empty object \{\} for the index-level delete/clear actions\) |
239239

240240
#### Output
241241

apps/docs/content/docs/en/integrations/amplitude.mdx

Lines changed: 94 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
77

88
<BlockInfoCard
99
type="amplitude"
10-
color="#1B1F3B"
10+
color="#13294B"
1111
/>
1212

1313
{/* MANUAL-CONTENT-START:intro */}
@@ -31,7 +31,7 @@ In Sim, the Amplitude integration enables powerful analytics automation scenario
3131

3232
## Usage Instructions
3333

34-
Integrate Amplitude into your workflow to track events, identify users and groups, search for users, query analytics, and retrieve revenue data.
34+
Integrate Amplitude into your workflow to track events, identify users and groups, search for users, query analytics, analyze funnels and retention, and retrieve revenue data.
3535

3636

3737

@@ -64,6 +64,7 @@ Track an event in Amplitude using the HTTP V2 API.
6464
| `revenue` | string | No | Revenue amount |
6565
| `productId` | string | No | Product identifier |
6666
| `revenueType` | string | No | Revenue type \(e.g., "purchase", "refund"\) |
67+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
6768

6869
#### Output
6970

@@ -86,6 +87,7 @@ Set user properties in Amplitude using the Identify API. Supports $set, $setOnce
8687
| `userId` | string | No | User ID \(required if no device_id\) |
8788
| `deviceId` | string | No | Device ID \(required if no user_id\) |
8889
| `userProperties` | string | Yes | JSON object of user properties. Use operations like $set, $setOnce, $add, $append, $unset. |
90+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
8991

9092
#### Output
9193

@@ -106,6 +108,7 @@ Set group-level properties in Amplitude. Supports $set, $setOnce, $add, $append,
106108
| `groupType` | string | Yes | Group classification \(e.g., "company", "org_id"\) |
107109
| `groupValue` | string | Yes | Specific group identifier \(e.g., "Acme Corp"\) |
108110
| `groupProperties` | string | Yes | JSON object of group properties. Use operations like $set, $setOnce, $add, $append, $unset. |
111+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
109112

110113
#### Output
111114

@@ -125,6 +128,7 @@ Search for a user by User ID, Device ID, or Amplitude ID using the Dashboard RES
125128
| `apiKey` | string | Yes | Amplitude API Key |
126129
| `secretKey` | string | Yes | Amplitude Secret Key |
127130
| `user` | string | Yes | User ID, Device ID, or Amplitude ID to search for |
131+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
128132

129133
#### Output
130134

@@ -149,6 +153,7 @@ Get the event stream for a specific user by their Amplitude ID.
149153
| `offset` | string | No | Offset for pagination \(default 0\) |
150154
| `limit` | string | No | Maximum number of events to return \(default 1000, max 1000\) |
151155
| `direction` | string | No | Sort direction: "latest" or "earliest" \(default: latest\) |
156+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
152157

153158
#### Output
154159

@@ -170,10 +175,12 @@ Get the event stream for a specific user by their Amplitude ID.
170175
|`numSessions` | number | Total session count |
171176
|`platform` | string | Primary platform |
172177
|`country` | string | Country |
178+
|`firstUsed` | string | Date the user first appeared |
179+
|`lastUsed` | string | Date of most recent user activity |
173180

174181
### `amplitude_user_profile`
175182

176-
Get a user profile including properties, cohort memberships, and computed properties.
183+
Get a user profile including properties, cohort memberships, and computed properties. Not available for EU data-residency projects.
177184

178185
#### Input
179186

@@ -212,7 +219,12 @@ Query event analytics data with segmentation. Get event counts, uniques, average
212219
| `metric` | string | No | Metric type: uniques, totals, pct_dau, average, histogram, sums, value_avg, or formula \(default: uniques\) |
213220
| `interval` | string | No | Time interval: 1 \(daily\), 7 \(weekly\), or 30 \(monthly\) |
214221
| `groupBy` | string | No | Property name to group by \(prefix custom user properties with "gp:"\) |
222+
| `groupBy2` | string | No | Second property name to group by \(prefix custom user properties with "gp:"\) |
215223
| `limit` | string | No | Maximum number of group-by values \(max 1000\) |
224+
| `filters` | string | No | JSON array of filter objects applied to the event, e.g. \[\{"subprop_type":"event","subprop_key":"city","subprop_op":"is","subprop_value":\["San Francisco"\]\}\] |
225+
| `formula` | string | No | Required when metric is "formula", e.g. "UNIQUES\(A\)/UNIQUES\(B\)" |
226+
| `segment` | string | No | JSON segment definition\(s\) applied to the query |
227+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
216228

217229
#### Output
218230

@@ -237,6 +249,9 @@ Get active or new user counts over a date range from the Dashboard REST API.
237249
| `end` | string | Yes | End date in YYYYMMDD format |
238250
| `metric` | string | No | Metric type: "active" or "new" \(default: active\) |
239251
| `interval` | string | No | Time interval: 1 \(daily\), 7 \(weekly\), or 30 \(monthly\) |
252+
| `groupBy` | string | No | Property name to group by |
253+
| `segment` | string | No | JSON segment definition\(s\) applied to the query |
254+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
240255

241256
#### Output
242257

@@ -256,6 +271,7 @@ Get real-time active user counts at 5-minute granularity for the last 2 days.
256271
| --------- | ---- | -------- | ----------- |
257272
| `apiKey` | string | Yes | Amplitude API Key |
258273
| `secretKey` | string | Yes | Amplitude Secret Key |
274+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
259275

260276
#### Output
261277

@@ -275,6 +291,7 @@ List all event types in the Amplitude project with their weekly totals and uniqu
275291
| --------- | ---- | -------- | ----------- |
276292
| `apiKey` | string | Yes | Amplitude API Key |
277293
| `secretKey` | string | Yes | Amplitude Secret Key |
294+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
278295

279296
#### Output
280297

@@ -286,6 +303,8 @@ List all event types in the Amplitude project with their weekly totals and uniqu
286303
|`totals` | number | Weekly total count |
287304
|`hidden` | boolean | Whether the event is hidden |
288305
|`deleted` | boolean | Whether the event is deleted |
306+
|`nonActive` | boolean | Whether the event is excluded from active user calculations |
307+
|`flowHidden` | boolean | Whether the event is hidden from user flow charts |
289308

290309
### `amplitude_get_revenue`
291310

@@ -301,13 +320,83 @@ Get revenue LTV data including ARPU, ARPPU, total revenue, and paying user count
301320
| `end` | string | Yes | End date in YYYYMMDD format |
302321
| `metric` | string | No | Metric: 0 \(ARPU\), 1 \(ARPPU\), 2 \(Total Revenue\), 3 \(Paying Users\) |
303322
| `interval` | string | No | Time interval: 1 \(daily\), 7 \(weekly\), or 30 \(monthly\) |
323+
| `groupBy` | string | No | Property name to group by \(limit: one\) |
324+
| `segment` | string | No | JSON segment definition\(s\) applied to the query |
325+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
304326

305327
#### Output
306328

307329
| Parameter | Type | Description |
308330
| --------- | ---- | ----------- |
309-
| `series` | json | Array of revenue data series |
331+
| `series` | array | Revenue data series \[\{dates: \[YYYY-MM-DD\], values: \{&lt;date&gt;: \{r1d..r90d, count, paid, total_amount\}\}\}\] |
332+
|`dates` | array | Dates covered by this series |
333+
|`values` | json | Per-date metric values keyed by date \(r1d..r90d, count, paid, total_amount\) |
310334
| `seriesLabels` | array | Labels for each data series |
311-
| `xValues` | array | Date values for the x-axis |
335+
336+
### `amplitude_funnels`
337+
338+
Analyze conversion rates and drop-off between a sequence of events.
339+
340+
#### Input
341+
342+
| Parameter | Type | Required | Description |
343+
| --------- | ---- | -------- | ----------- |
344+
| `apiKey` | string | Yes | Amplitude API Key |
345+
| `secretKey` | string | Yes | Amplitude Secret Key |
346+
| `events` | string | Yes | JSON array of event objects, one per funnel step in order, e.g. \[\{"event_type":"signup"\},\{"event_type":"purchase"\}\] |
347+
| `start` | string | Yes | Start date in YYYYMMDD format |
348+
| `end` | string | Yes | End date in YYYYMMDD format |
349+
| `mode` | string | No | Funnel ordering: "ordered", "unordered", or "sequential" \(default: ordered\) |
350+
| `userType` | string | No | User type: "new" or "active" \(default: active\) |
351+
| `interval` | string | No | Time interval: -300000 \(real-time\), -3600000 \(hourly\), 1 \(daily\), 7 \(weekly\), or 30 \(monthly\) |
352+
| `conversionWindowSeconds` | string | No | Conversion window in seconds \(default: 2592000, i.e. 30 days\) |
353+
| `groupBy` | string | No | Property to group by \(limit: one; prefix custom properties with "gp:"\) |
354+
| `limit` | string | No | Maximum number of group-by values \(default: 100, max: 1000\) |
355+
| `segment` | string | No | JSON segment definition\(s\) applied to the query |
356+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
357+
358+
#### Output
359+
360+
| Parameter | Type | Description |
361+
| --------- | ---- | ----------- |
362+
| `funnels` | array | Funnel results, one entry per segment |
363+
|`stepByStep` | json | Conversion count at each step |
364+
|`cumulative` | json | Cumulative conversion percentage at each step |
365+
|`cumulativeRaw` | json | Cumulative conversion count at each step |
366+
|`medianTransTimes` | json | Median transition time between steps \(ms\) |
367+
|`avgTransTimes` | json | Average transition time between steps \(ms\) |
368+
|`events` | json | Event names for each funnel step |
369+
|`dayFunnels` | json | Daily funnel breakdown \{series, xValues\} |
370+
371+
### `amplitude_retention`
372+
373+
Measure how many users return to perform an action after a starting action.
374+
375+
#### Input
376+
377+
| Parameter | Type | Required | Description |
378+
| --------- | ---- | -------- | ----------- |
379+
| `apiKey` | string | Yes | Amplitude API Key |
380+
| `secretKey` | string | Yes | Amplitude Secret Key |
381+
| `startEvent` | string | Yes | JSON starting event object, e.g. \{"event_type":"_new"\} or \{"event_type":"_active"\} |
382+
| `returnEvent` | string | Yes | JSON returning event object, e.g. \{"event_type":"_all"\} or \{"event_type":"_active"\} |
383+
| `start` | string | Yes | Start date in YYYYMMDD format |
384+
| `end` | string | Yes | End date in YYYYMMDD format |
385+
| `retentionMode` | string | No | Retention type: "bracket", "rolling", or "n-day" \(default: n-day\) |
386+
| `retentionBrackets` | string | No | Required when Retention Mode is "bracket". Day ranges, e.g. \[\[0,4\]\] |
387+
| `interval` | string | No | Time interval: 1 \(daily\), 7 \(weekly\), or 30 \(monthly\) |
388+
| `groupBy` | string | No | Property to group by \(limit: one; prefix custom properties with "gp:"\) |
389+
| `segment` | string | No | JSON segment definition\(s\) applied to the query |
390+
| `dataResidency` | string | No | Data residency region: "us" \(default\) or "eu" |
391+
392+
#### Output
393+
394+
| Parameter | Type | Description |
395+
| --------- | ---- | ----------- |
396+
| `series` | array | Retention data series \[\{dates, values: \{&lt;date&gt;: \[\{count, outof, incomplete\}\]\}, combined: \[\{count, outof, incomplete\}\]\}\] |
397+
|`dates` | array | Cohort dates |
398+
|`values` | json | Per-cohort-date retention counts keyed by date |
399+
|`combined` | json | Deduplicated aggregate retention across all cohorts |
400+
| `seriesMeta` | array | Segment/event index metadata for each series entry |
312401

313402

apps/docs/content/docs/en/integrations/brex.mdx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,8 @@ List spend limits in the Brex account, optionally filtered by member user
724724
|`status` | string | Spend limit status |
725725
|`period_recurrence_type` | string | Period recurrence \(PER_WEEK, PER_MONTH, PER_QUARTER, PER_YEAR, ONE_TIME\) |
726726
|`spend_type` | string | Spend type of the limit |
727+
|`start_date` | string | Spend limit start date |
728+
|`end_date` | string | Spend limit end date |
727729
|`owner_user_ids` | array | User IDs of the spend limit owners |
728730
|`member_user_ids` | array | User IDs of the spend limit members |
729731
|`current_period_balance` | json | Spend and rollover amounts for the current period |
@@ -737,6 +739,7 @@ List spend limits in the Brex account, optionally filtered by member user
737739
|`rollover_amount` | json | Amount rolled over from previous periods |
738740
|`amount` | number | Amount in the smallest unit of the currency \(e.g., cents for USD\) |
739741
|`currency` | string | ISO 4217 currency code \(e.g., USD\) |
742+
|`authorization_settings` | json | Authorization settings \(base limit, authorization type, rollover refresh\) |
740743
| `nextCursor` | string | Cursor for fetching the next page of results |
741744

742745
### `brex_get_spend_limit`
@@ -858,6 +861,7 @@ List money transfers in the Brex account
858861
|`created_at` | string | Creation timestamp |
859862
|`display_name` | string | Transfer display name |
860863
|`external_memo` | string | External memo |
864+
|`is_ppro_enabled` | boolean | Whether Principal Protection \(PPRO\) is enabled |
861865
| `nextCursor` | string | Cursor for fetching the next page of results |
862866

863867
### `brex_get_transfer`
@@ -891,5 +895,6 @@ Get a Brex money transfer by its ID
891895
| `createdAt` | string | Creation timestamp |
892896
| `displayName` | string | Transfer display name |
893897
| `externalMemo` | string | External memo |
898+
| `isPproEnabled` | boolean | Whether Principal Protection \(PPRO\) is enabled |
894899

895900

0 commit comments

Comments
 (0)