From 688c933d58445478458347d7f4e425ee7cea4e19 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:34:04 -0700 Subject: [PATCH 01/16] feat(profound): add Profound AI visibility and analytics integration --- apps/docs/components/icons.tsx | 11 + apps/docs/components/ui/icon-mapping.ts | 2 + apps/docs/content/docs/en/tools/meta.json | 1 + apps/docs/content/docs/en/tools/profound.mdx | 303 +++++ .../integrations/data/icon-mapping.ts | 16 +- .../integrations/data/integrations.json | 1036 ++++++++++++++--- apps/sim/blocks/blocks/profound.ts | 418 +++++++ apps/sim/blocks/registry.ts | 2 + apps/sim/components/icons.tsx | 11 + apps/sim/tools/profound/bot-logs.ts | 133 +++ apps/sim/tools/profound/bots-report.ts | 141 +++ apps/sim/tools/profound/category-assets.ts | 84 ++ apps/sim/tools/profound/category-personas.ts | 98 ++ apps/sim/tools/profound/category-prompts.ts | 189 +++ apps/sim/tools/profound/category-tags.ts | 64 + apps/sim/tools/profound/category-topics.ts | 64 + apps/sim/tools/profound/citation-prompts.ts | 60 + apps/sim/tools/profound/citations-report.ts | 140 +++ apps/sim/tools/profound/index.ts | 24 + apps/sim/tools/profound/list-assets.ts | 85 ++ apps/sim/tools/profound/list-categories.ts | 57 + apps/sim/tools/profound/list-domains.ts | 59 + apps/sim/tools/profound/list-models.ts | 57 + apps/sim/tools/profound/list-optimizations.ts | 104 ++ apps/sim/tools/profound/list-personas.ts | 96 ++ apps/sim/tools/profound/list-regions.ts | 57 + .../tools/profound/optimization-analysis.ts | 161 +++ apps/sim/tools/profound/prompt-answers.ts | 137 +++ apps/sim/tools/profound/prompt-volume.ts | 134 +++ apps/sim/tools/profound/query-fanouts.ts | 139 +++ apps/sim/tools/profound/raw-logs.ts | 133 +++ apps/sim/tools/profound/referrals-report.ts | 142 +++ apps/sim/tools/profound/sentiment-report.ts | 140 +++ apps/sim/tools/profound/types.ts | 422 +++++++ apps/sim/tools/profound/visibility-report.ts | 141 +++ apps/sim/tools/registry.ts | 50 + 36 files changed, 4731 insertions(+), 180 deletions(-) create mode 100644 apps/docs/content/docs/en/tools/profound.mdx create mode 100644 apps/sim/blocks/blocks/profound.ts create mode 100644 apps/sim/tools/profound/bot-logs.ts create mode 100644 apps/sim/tools/profound/bots-report.ts create mode 100644 apps/sim/tools/profound/category-assets.ts create mode 100644 apps/sim/tools/profound/category-personas.ts create mode 100644 apps/sim/tools/profound/category-prompts.ts create mode 100644 apps/sim/tools/profound/category-tags.ts create mode 100644 apps/sim/tools/profound/category-topics.ts create mode 100644 apps/sim/tools/profound/citation-prompts.ts create mode 100644 apps/sim/tools/profound/citations-report.ts create mode 100644 apps/sim/tools/profound/index.ts create mode 100644 apps/sim/tools/profound/list-assets.ts create mode 100644 apps/sim/tools/profound/list-categories.ts create mode 100644 apps/sim/tools/profound/list-domains.ts create mode 100644 apps/sim/tools/profound/list-models.ts create mode 100644 apps/sim/tools/profound/list-optimizations.ts create mode 100644 apps/sim/tools/profound/list-personas.ts create mode 100644 apps/sim/tools/profound/list-regions.ts create mode 100644 apps/sim/tools/profound/optimization-analysis.ts create mode 100644 apps/sim/tools/profound/prompt-answers.ts create mode 100644 apps/sim/tools/profound/prompt-volume.ts create mode 100644 apps/sim/tools/profound/query-fanouts.ts create mode 100644 apps/sim/tools/profound/raw-logs.ts create mode 100644 apps/sim/tools/profound/referrals-report.ts create mode 100644 apps/sim/tools/profound/sentiment-report.ts create mode 100644 apps/sim/tools/profound/types.ts create mode 100644 apps/sim/tools/profound/visibility-report.ts diff --git a/apps/docs/components/icons.tsx b/apps/docs/components/icons.tsx index b79a166e901..6f53db86f8b 100644 --- a/apps/docs/components/icons.tsx +++ b/apps/docs/components/icons.tsx @@ -1285,6 +1285,17 @@ export function StartIcon(props: SVGProps) { ) } +export function ProfoundIcon(props: SVGProps) { + return ( + + + + ) +} + export function PineconeIcon(props: SVGProps) { return ( = { polymarket: PolymarketIcon, postgresql: PostgresIcon, posthog: PosthogIcon, + profound: ProfoundIcon, pulse_v2: PulseIcon, qdrant: QdrantIcon, quiver: QuiverIcon, diff --git a/apps/docs/content/docs/en/tools/meta.json b/apps/docs/content/docs/en/tools/meta.json index a52a54cf0f8..49ee064ffb1 100644 --- a/apps/docs/content/docs/en/tools/meta.json +++ b/apps/docs/content/docs/en/tools/meta.json @@ -121,6 +121,7 @@ "polymarket", "postgresql", "posthog", + "profound", "pulse", "qdrant", "quiver", diff --git a/apps/docs/content/docs/en/tools/profound.mdx b/apps/docs/content/docs/en/tools/profound.mdx new file mode 100644 index 00000000000..c8ea9b70cfc --- /dev/null +++ b/apps/docs/content/docs/en/tools/profound.mdx @@ -0,0 +1,303 @@ +--- +title: Profound +description: AI visibility and analytics with Profound +--- + +import { BlockInfoCard } from "@/components/ui/block-info-card" + + + +{/* MANUAL-CONTENT-START:intro */} +[Profound](https://tryprofound.com/) is an AI visibility and analytics platform that helps brands understand how they appear across AI-powered search engines, chatbots, and assistants. It tracks mentions, citations, sentiment, bot traffic, and referral patterns across platforms like ChatGPT, Perplexity, Google AI Overviews, and more. + +With the Profound integration in Sim, you can: + +- **Monitor AI Visibility**: Track share of voice, visibility scores, and mention counts across AI platforms for your brand and competitors. +- **Analyze Sentiment**: Measure how positively or negatively your brand is discussed in AI-generated responses. +- **Track Citations**: See which URLs are being cited by AI models and your citation share relative to competitors. +- **Monitor Bot Traffic**: Analyze AI crawler activity on your domain, including GPTBot, ClaudeBot, and other AI agents, with hourly granularity. +- **Track Referral Traffic**: Monitor human visits arriving from AI platforms to your website. +- **Explore Prompt Data**: Access raw prompt-answer pairs, query fanouts, and prompt volume trends across AI platforms. +- **Optimize Content**: Get AEO (Answer Engine Optimization) scores and actionable recommendations to improve how AI models reference your content. +- **Manage Categories & Assets**: List and explore your tracked categories, assets (brands), topics, tags, personas, and regions. + +These tools let your agents automate AI visibility monitoring, competitive intelligence, and content optimization workflows. To use the Profound integration, you'll need a Profound account with API access. +{/* MANUAL-CONTENT-END */} + + +## Usage Instructions + +Track how your brand appears across AI platforms. Monitor visibility scores, sentiment, citations, bot traffic, referrals, content optimization, and prompt volumes with Profound. + + + +## Tools + +### `profound_list_categories` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_list_regions` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_list_models` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_list_domains` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_list_assets` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_list_personas` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_category_topics` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_category_tags` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_category_prompts` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_category_assets` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_category_personas` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_visibility_report` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_sentiment_report` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_citations_report` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_query_fanouts` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_prompt_answers` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_bots_report` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_referrals_report` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_raw_logs` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_bot_logs` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_list_optimizations` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_optimization_analysis` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_prompt_volume` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + +### `profound_citation_prompts` + +#### Input + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | + +#### Output + +This tool does not produce any outputs. + + diff --git a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts index 1d77fc88889..65f4889de79 100644 --- a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts +++ b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts @@ -33,8 +33,8 @@ import { DatadogIcon, DevinIcon, DiscordIcon, - DocumentIcon, DocuSignIcon, + DocumentIcon, DropboxIcon, DsPyIcon, DubIcon, @@ -50,8 +50,8 @@ import { FirecrawlIcon, FirefliesIcon, GammaIcon, - GithubIcon, GitLabIcon, + GithubIcon, GmailIcon, GongIcon, GoogleAdsIcon, @@ -97,9 +97,9 @@ import { LinkupIcon, LoopsIcon, LumaIcon, + MailServerIcon, MailchimpIcon, MailgunIcon, - MailServerIcon, Mem0Icon, MicrosoftDataverseIcon, MicrosoftExcelIcon, @@ -126,6 +126,7 @@ import { PolymarketIcon, PostgresIcon, PosthogIcon, + ProfoundIcon, PulseIcon, QdrantIcon, QuiverIcon, @@ -137,6 +138,8 @@ import { RevenueCatIcon, RipplingIcon, S3Icon, + SQSIcon, + STTIcon, SalesforceIcon, SearchIcon, SendgridIcon, @@ -148,19 +151,17 @@ import { SimilarwebIcon, SlackIcon, SmtpIcon, - SQSIcon, SshIcon, - STTIcon, StagehandIcon, StripeIcon, SupabaseIcon, + TTSIcon, TavilyIcon, TelegramIcon, TextractIcon, TinybirdIcon, TranslateIcon, TrelloIcon, - TTSIcon, TwilioIcon, TypeformIcon, UpstashIcon, @@ -172,11 +173,11 @@ import { WikipediaIcon, WordpressIcon, WorkdayIcon, - xIcon, YouTubeIcon, ZendeskIcon, ZepIcon, ZoomIcon, + xIcon, } from '@/components/icons' type IconComponent = ComponentType> @@ -302,6 +303,7 @@ export const blockTypeToIconMap: Record = { polymarket: PolymarketIcon, postgresql: PostgresIcon, posthog: PosthogIcon, + profound: ProfoundIcon, pulse_v2: PulseIcon, qdrant: QdrantIcon, quiver: QuiverIcon, diff --git a/apps/sim/app/(landing)/integrations/data/integrations.json b/apps/sim/app/(landing)/integrations/data/integrations.json index 95d2ef9ea29..dcb971067cd 100644 --- a/apps/sim/app/(landing)/integrations/data/integrations.json +++ b/apps/sim/app/(landing)/integrations/data/integrations.json @@ -52,7 +52,10 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": ["secrets-management", "identity"] + "tags": [ + "secrets-management", + "identity" + ] }, { "type": "a2a", @@ -103,7 +106,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["agentic", "automation"] + "tags": [ + "agentic", + "automation" + ] }, { "type": "ahrefs", @@ -154,7 +160,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["seo", "marketing", "data-analytics"] + "tags": [ + "seo", + "marketing", + "data-analytics" + ] }, { "type": "airtable", @@ -211,7 +221,10 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": ["spreadsheet", "automation"] + "tags": [ + "spreadsheet", + "automation" + ] }, { "type": "airweave", @@ -229,7 +242,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "algolia", @@ -308,7 +324,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "dynamodb", @@ -355,7 +374,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "rds", @@ -398,7 +420,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "sqs", @@ -421,7 +446,11 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "messaging", "automation"] + "tags": [ + "cloud", + "messaging", + "automation" + ] }, { "type": "amplitude", @@ -484,7 +513,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["data-analytics", "marketing"] + "tags": [ + "data-analytics", + "marketing" + ] }, { "type": "apify", @@ -511,7 +543,11 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation", "data-analytics"] + "tags": [ + "web-scraping", + "automation", + "data-analytics" + ] }, { "type": "apollo", @@ -630,7 +666,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "sales-engagement"] + "tags": [ + "enrichment", + "sales-engagement" + ] }, { "type": "arxiv", @@ -661,7 +700,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["document-processing", "knowledge-base"] + "tags": [ + "document-processing", + "knowledge-base" + ] }, { "type": "asana", @@ -704,7 +746,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing", "automation"] + "tags": [ + "project-management", + "ticketing", + "automation" + ] }, { "type": "ashby", @@ -866,7 +912,9 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": ["hiring"] + "tags": [ + "hiring" + ] }, { "type": "attio", @@ -1136,7 +1184,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "enrichment"] + "tags": [ + "sales-engagement", + "enrichment" + ] }, { "type": "textract_v2", @@ -1154,7 +1205,11 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr", "cloud"] + "tags": [ + "document-processing", + "ocr", + "cloud" + ] }, { "type": "microsoft_ad", @@ -1225,7 +1280,10 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": ["identity", "microsoft-365"] + "tags": [ + "identity", + "microsoft-365" + ] }, { "type": "box", @@ -1304,7 +1362,11 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "content-management", "e-signatures"] + "tags": [ + "cloud", + "content-management", + "e-signatures" + ] }, { "type": "brandfetch", @@ -1331,7 +1393,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "marketing"] + "tags": [ + "enrichment", + "marketing" + ] }, { "type": "browser_use", @@ -1349,7 +1414,11 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation", "agentic"] + "tags": [ + "web-scraping", + "automation", + "agentic" + ] }, { "type": "calcom", @@ -1490,7 +1559,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["scheduling", "calendar", "meeting"] + "tags": [ + "scheduling", + "calendar", + "meeting" + ] }, { "type": "calendly", @@ -1558,7 +1631,11 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": ["scheduling", "calendar", "meeting"] + "tags": [ + "scheduling", + "calendar", + "meeting" + ] }, { "type": "circleback", @@ -1592,7 +1669,11 @@ "authType": "none", "category": "triggers", "integrationType": "ai", - "tags": ["meeting", "note-taking", "automation"] + "tags": [ + "meeting", + "note-taking", + "automation" + ] }, { "type": "clay", @@ -1610,7 +1691,11 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "sales-engagement", "data-analytics"] + "tags": [ + "enrichment", + "sales-engagement", + "data-analytics" + ] }, { "type": "clerk", @@ -1673,7 +1758,10 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": ["identity", "automation"] + "tags": [ + "identity", + "automation" + ] }, { "type": "cloudflare", @@ -1744,7 +1832,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "monitoring"] + "tags": [ + "cloud", + "monitoring" + ] }, { "type": "confluence_v2", @@ -2028,7 +2119,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["knowledge-base", "content-management", "note-taking"] + "tags": [ + "knowledge-base", + "content-management", + "note-taking" + ] }, { "type": "cursor_v2", @@ -2075,7 +2170,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["agentic", "automation"] + "tags": [ + "agentic", + "automation" + ] }, { "type": "databricks", @@ -2126,7 +2224,11 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics", "cloud"] + "tags": [ + "data-warehouse", + "data-analytics", + "cloud" + ] }, { "type": "datadog", @@ -2193,7 +2295,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["monitoring", "incident-management", "error-tracking"] + "tags": [ + "monitoring", + "incident-management", + "error-tracking" + ] }, { "type": "devin", @@ -2228,7 +2334,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["agentic", "automation"] + "tags": [ + "agentic", + "automation" + ] }, { "type": "discord", @@ -2387,7 +2496,11 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "webhooks", "automation"] + "tags": [ + "messaging", + "webhooks", + "automation" + ] }, { "type": "docusign", @@ -2438,7 +2551,10 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["e-signatures", "document-processing"] + "tags": [ + "e-signatures", + "document-processing" + ] }, { "type": "dropbox", @@ -2497,7 +2613,10 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "document-processing"] + "tags": [ + "cloud", + "document-processing" + ] }, { "type": "dspy", @@ -2528,7 +2647,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "agentic", "automation"] + "tags": [ + "llm", + "agentic", + "automation" + ] }, { "type": "dub", @@ -2575,7 +2698,11 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["link-management", "marketing", "data-analytics"] + "tags": [ + "link-management", + "marketing", + "data-analytics" + ] }, { "type": "duckduckgo", @@ -2593,7 +2720,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "seo"] + "tags": [ + "web-scraping", + "seo" + ] }, { "type": "elasticsearch", @@ -2664,7 +2794,10 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["vector-search", "data-analytics"] + "tags": [ + "vector-search", + "data-analytics" + ] }, { "type": "elevenlabs", @@ -2682,7 +2815,9 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["text-to-speech"] + "tags": [ + "text-to-speech" + ] }, { "type": "openai", @@ -2700,7 +2835,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "vector-search"] + "tags": [ + "llm", + "vector-search" + ] }, { "type": "enrich", @@ -2835,7 +2973,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "data-analytics"] + "tags": [ + "enrichment", + "data-analytics" + ] }, { "type": "evernote", @@ -2898,7 +3039,10 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": ["note-taking", "knowledge-base"] + "tags": [ + "note-taking", + "knowledge-base" + ] }, { "type": "exa", @@ -2937,7 +3081,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "enrichment"] + "tags": [ + "web-scraping", + "enrichment" + ] }, { "type": "fathom", @@ -2987,7 +3134,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["meeting", "note-taking"] + "tags": [ + "meeting", + "note-taking" + ] }, { "type": "file_v3", @@ -3005,7 +3155,9 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": ["document-processing"] + "tags": [ + "document-processing" + ] }, { "type": "firecrawl", @@ -3048,7 +3200,10 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation"] + "tags": [ + "web-scraping", + "automation" + ] }, { "type": "fireflies_v2", @@ -3113,7 +3268,11 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["meeting", "speech-to-text", "note-taking"] + "tags": [ + "meeting", + "speech-to-text", + "note-taking" + ] }, { "type": "gamma", @@ -3152,7 +3311,10 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": ["document-processing", "content-management"] + "tags": [ + "document-processing", + "content-management" + ] }, { "type": "github_v2", @@ -3559,7 +3721,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["version-control", "ci-cd"] + "tags": [ + "version-control", + "ci-cd" + ] }, { "type": "gitlab", @@ -3654,7 +3819,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["version-control", "ci-cd"] + "tags": [ + "version-control", + "ci-cd" + ] }, { "type": "gmail_v2", @@ -3721,7 +3889,10 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": ["google-workspace", "messaging"] + "tags": [ + "google-workspace", + "messaging" + ] }, { "type": "gong", @@ -3812,7 +3983,11 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["meeting", "sales-engagement", "speech-to-text"] + "tags": [ + "meeting", + "sales-engagement", + "speech-to-text" + ] }, { "type": "google_ads", @@ -3855,7 +4030,11 @@ "authType": "oauth", "category": "tools", "integrationType": "analytics", - "tags": ["marketing", "google-workspace", "data-analytics"] + "tags": [ + "marketing", + "google-workspace", + "data-analytics" + ] }, { "type": "google_bigquery", @@ -3894,7 +4073,11 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "google-workspace", "data-analytics"] + "tags": [ + "data-warehouse", + "google-workspace", + "data-analytics" + ] }, { "type": "google_books", @@ -3921,7 +4104,11 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["google-workspace", "knowledge-base", "content-management"] + "tags": [ + "google-workspace", + "knowledge-base", + "content-management" + ] }, { "type": "google_calendar_v2", @@ -3980,7 +4167,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["calendar", "scheduling", "google-workspace"] + "tags": [ + "calendar", + "scheduling", + "google-workspace" + ] }, { "type": "google_contacts", @@ -4023,7 +4214,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["google-workspace", "customer-support", "enrichment"] + "tags": [ + "google-workspace", + "customer-support", + "enrichment" + ] }, { "type": "google_docs", @@ -4054,7 +4249,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["google-workspace", "document-processing", "content-management"] + "tags": [ + "google-workspace", + "document-processing", + "content-management" + ] }, { "type": "google_drive", @@ -4129,7 +4328,11 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "google-workspace", "document-processing"] + "tags": [ + "cloud", + "google-workspace", + "document-processing" + ] }, { "type": "google_forms", @@ -4190,7 +4393,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["google-workspace", "forms", "data-analytics"] + "tags": [ + "google-workspace", + "forms", + "data-analytics" + ] }, { "type": "google_groups", @@ -4273,7 +4480,11 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["google-workspace", "messaging", "identity"] + "tags": [ + "google-workspace", + "messaging", + "identity" + ] }, { "type": "google_maps", @@ -4344,7 +4555,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["google-workspace", "enrichment"] + "tags": [ + "google-workspace", + "enrichment" + ] }, { "type": "google_meet", @@ -4387,7 +4601,11 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["meeting", "google-workspace", "scheduling"] + "tags": [ + "meeting", + "google-workspace", + "scheduling" + ] }, { "type": "google_pagespeed", @@ -4405,7 +4623,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["google-workspace", "seo", "monitoring"] + "tags": [ + "google-workspace", + "seo", + "monitoring" + ] }, { "type": "google_search", @@ -4423,7 +4645,11 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["google-workspace", "web-scraping", "seo"] + "tags": [ + "google-workspace", + "web-scraping", + "seo" + ] }, { "type": "google_sheets_v2", @@ -4486,7 +4712,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["spreadsheet", "google-workspace", "data-analytics"] + "tags": [ + "spreadsheet", + "google-workspace", + "data-analytics" + ] }, { "type": "google_slides_v2", @@ -4561,7 +4791,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["google-workspace", "document-processing", "content-management"] + "tags": [ + "google-workspace", + "document-processing", + "content-management" + ] }, { "type": "google_tasks", @@ -4604,7 +4838,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["google-workspace", "project-management", "scheduling"] + "tags": [ + "google-workspace", + "project-management", + "scheduling" + ] }, { "type": "google_translate", @@ -4631,7 +4869,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["google-workspace", "content-management", "automation"] + "tags": [ + "google-workspace", + "content-management", + "automation" + ] }, { "type": "google_vault", @@ -4678,7 +4920,11 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": ["google-workspace", "secrets-management", "document-processing"] + "tags": [ + "google-workspace", + "secrets-management", + "document-processing" + ] }, { "type": "grafana", @@ -4773,7 +5019,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["monitoring", "data-analytics"] + "tags": [ + "monitoring", + "data-analytics" + ] }, { "type": "grain", @@ -4869,7 +5118,10 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["meeting", "note-taking"] + "tags": [ + "meeting", + "note-taking" + ] }, { "type": "granola", @@ -4896,7 +5148,10 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": ["meeting", "note-taking"] + "tags": [ + "meeting", + "note-taking" + ] }, { "type": "greenhouse", @@ -4959,7 +5214,9 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": ["hiring"] + "tags": [ + "hiring" + ] }, { "type": "greptile", @@ -4994,7 +5251,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["version-control", "knowledge-base"] + "tags": [ + "version-control", + "knowledge-base" + ] }, { "type": "hex", @@ -5077,7 +5337,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "hubspot", @@ -5303,7 +5566,11 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["marketing", "sales-engagement", "customer-support"] + "tags": [ + "marketing", + "sales-engagement", + "customer-support" + ] }, { "type": "huggingface", @@ -5321,7 +5588,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "agentic"] + "tags": [ + "llm", + "agentic" + ] }, { "type": "hunter", @@ -5364,7 +5634,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "sales-engagement"] + "tags": [ + "enrichment", + "sales-engagement" + ] }, { "type": "image_generator", @@ -5382,7 +5655,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["image-generation", "llm"] + "tags": [ + "image-generation", + "llm" + ] }, { "type": "imap", @@ -5406,7 +5682,10 @@ "authType": "none", "category": "triggers", "integrationType": "email", - "tags": ["messaging", "automation"] + "tags": [ + "messaging", + "automation" + ] }, { "type": "incidentio", @@ -5601,7 +5880,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["incident-management", "monitoring"] + "tags": [ + "incident-management", + "monitoring" + ] }, { "type": "infisical", @@ -5640,7 +5922,9 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": ["secrets-management"] + "tags": [ + "secrets-management" + ] }, { "type": "intercom_v2", @@ -5783,7 +6067,10 @@ "authType": "api-key", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "messaging"] + "tags": [ + "customer-support", + "messaging" + ] }, { "type": "jina", @@ -5810,7 +6097,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "knowledge-base"] + "tags": [ + "web-scraping", + "knowledge-base" + ] }, { "type": "jira", @@ -5956,7 +6246,10 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing"] + "tags": [ + "project-management", + "ticketing" + ] }, { "type": "jira_service_management", @@ -6059,7 +6352,11 @@ "authType": "oauth", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "ticketing", "incident-management"] + "tags": [ + "customer-support", + "ticketing", + "incident-management" + ] }, { "type": "kalshi_v2", @@ -6146,7 +6443,10 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["prediction-markets", "data-analytics"] + "tags": [ + "prediction-markets", + "data-analytics" + ] }, { "type": "ketch", @@ -6185,7 +6485,9 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": ["identity"] + "tags": [ + "identity" + ] }, { "type": "knowledge", @@ -6285,7 +6587,11 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["monitoring", "llm", "data-analytics"] + "tags": [ + "monitoring", + "llm", + "data-analytics" + ] }, { "type": "lemlist", @@ -6362,7 +6668,11 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["sales-engagement", "email-marketing", "automation"] + "tags": [ + "sales-engagement", + "email-marketing", + "automation" + ] }, { "type": "linear", @@ -6769,7 +7079,10 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing"] + "tags": [ + "project-management", + "ticketing" + ] }, { "type": "linkedin", @@ -6796,7 +7109,11 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": ["marketing", "sales-engagement", "enrichment"] + "tags": [ + "marketing", + "sales-engagement", + "enrichment" + ] }, { "type": "linkup", @@ -6814,7 +7131,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "enrichment"] + "tags": [ + "web-scraping", + "enrichment" + ] }, { "type": "loops", @@ -6873,7 +7193,11 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "marketing", "automation"] + "tags": [ + "email-marketing", + "marketing", + "automation" + ] }, { "type": "luma", @@ -6916,7 +7240,11 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": ["events", "calendar", "scheduling"] + "tags": [ + "events", + "calendar", + "scheduling" + ] }, { "type": "mailchimp", @@ -7227,7 +7555,11 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "marketing", "automation"] + "tags": [ + "email-marketing", + "marketing", + "automation" + ] }, { "type": "mailgun", @@ -7278,7 +7610,10 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["messaging", "email-marketing"] + "tags": [ + "messaging", + "email-marketing" + ] }, { "type": "mem0", @@ -7309,7 +7644,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "knowledge-base", "agentic"] + "tags": [ + "llm", + "knowledge-base", + "agentic" + ] }, { "type": "memory", @@ -7429,7 +7768,11 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": ["microsoft-365", "data-warehouse", "cloud"] + "tags": [ + "microsoft-365", + "data-warehouse", + "cloud" + ] }, { "type": "microsoft_excel_v2", @@ -7456,7 +7799,10 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["spreadsheet", "microsoft-365"] + "tags": [ + "spreadsheet", + "microsoft-365" + ] }, { "type": "microsoft_planner", @@ -7527,7 +7873,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "microsoft-365", "ticketing"] + "tags": [ + "project-management", + "microsoft-365", + "ticketing" + ] }, { "type": "microsoft_teams", @@ -7608,7 +7958,10 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "microsoft-365"] + "tags": [ + "messaging", + "microsoft-365" + ] }, { "type": "mistral_parse_v3", @@ -7626,7 +7979,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr"] + "tags": [ + "document-processing", + "ocr" + ] }, { "type": "mongodb", @@ -7669,7 +8025,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "cloud"] + "tags": [ + "data-warehouse", + "cloud" + ] }, { "type": "mysql", @@ -7712,7 +8071,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "neo4j", @@ -7759,7 +8121,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "notion_v2", @@ -7777,7 +8142,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["note-taking", "knowledge-base", "content-management"] + "tags": [ + "note-taking", + "knowledge-base", + "content-management" + ] }, { "type": "obsidian", @@ -7856,7 +8225,10 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": ["note-taking", "knowledge-base"] + "tags": [ + "note-taking", + "knowledge-base" + ] }, { "type": "okta", @@ -7947,7 +8319,10 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": ["identity", "automation"] + "tags": [ + "identity", + "automation" + ] }, { "type": "onedrive", @@ -7990,7 +8365,11 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["microsoft-365", "cloud", "document-processing"] + "tags": [ + "microsoft-365", + "cloud", + "document-processing" + ] }, { "type": "outlook", @@ -8045,7 +8424,11 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": ["microsoft-365", "messaging", "automation"] + "tags": [ + "microsoft-365", + "messaging", + "automation" + ] }, { "type": "pagerduty", @@ -8088,7 +8471,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["incident-management", "monitoring"] + "tags": [ + "incident-management", + "monitoring" + ] }, { "type": "parallel_ai", @@ -8119,7 +8505,11 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "llm", "agentic"] + "tags": [ + "web-scraping", + "llm", + "agentic" + ] }, { "type": "perplexity", @@ -8146,7 +8536,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "web-scraping", "agentic"] + "tags": [ + "llm", + "web-scraping", + "agentic" + ] }, { "type": "pinecone", @@ -8185,7 +8579,10 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "pipedrive", @@ -8276,7 +8673,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "project-management"] + "tags": [ + "sales-engagement", + "project-management" + ] }, { "type": "polymarket", @@ -8375,7 +8775,10 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["prediction-markets", "data-analytics"] + "tags": [ + "prediction-markets", + "data-analytics" + ] }, { "type": "postgresql", @@ -8418,7 +8821,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "posthog", @@ -8609,7 +9015,128 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["data-analytics", "monitoring"] + "tags": [ + "data-analytics", + "monitoring" + ] + }, + { + "type": "profound", + "slug": "profound", + "name": "Profound", + "description": "AI visibility and analytics with Profound", + "longDescription": "Track how your brand appears across AI platforms. Monitor visibility scores, sentiment, citations, bot traffic, referrals, content optimization, and prompt volumes with Profound.", + "bgColor": "#1A1A2E", + "iconName": "ProfoundIcon", + "docsUrl": "https://docs.sim.ai/tools/profound", + "operations": [ + { + "name": "List Categories", + "description": "List all organization categories in Profound" + }, + { + "name": "List Regions", + "description": "List all organization regions in Profound" + }, + { + "name": "List Models", + "description": "List all AI models/platforms tracked in Profound" + }, + { + "name": "List Domains", + "description": "List all organization domains in Profound" + }, + { + "name": "List Assets", + "description": "List all organization assets (companies/brands) across all categories in Profound" + }, + { + "name": "List Personas", + "description": "List all organization personas across all categories in Profound" + }, + { + "name": "Category Topics", + "description": "List topics for a specific category in Profound" + }, + { + "name": "Category Tags", + "description": "List tags for a specific category in Profound" + }, + { + "name": "Category Prompts", + "description": "List prompts for a specific category in Profound" + }, + { + "name": "Category Assets", + "description": "List assets (companies/brands) for a specific category in Profound" + }, + { + "name": "Category Personas", + "description": "List personas for a specific category in Profound" + }, + { + "name": "Visibility Report", + "description": "Query AI visibility report for a category in Profound" + }, + { + "name": "Sentiment Report", + "description": "Query sentiment report for a category in Profound" + }, + { + "name": "Citations Report", + "description": "Query citations report for a category in Profound" + }, + { + "name": "Query Fanouts", + "description": "Query fanout report showing how AI models expand prompts into sub-queries in Profound" + }, + { + "name": "Prompt Answers", + "description": "Get raw prompt answers data for a category in Profound" + }, + { + "name": "Bots Report", + "description": "Query bot traffic report with hourly granularity for a domain in Profound" + }, + { + "name": "Referrals Report", + "description": "Query human referral traffic report with hourly granularity for a domain in Profound" + }, + { + "name": "Raw Logs", + "description": "Get raw traffic logs with filters for a domain in Profound" + }, + { + "name": "Bot Logs", + "description": "Get identified bot visit logs with filters for a domain in Profound" + }, + { + "name": "List Optimizations", + "description": "List content optimization entries for an asset in Profound" + }, + { + "name": "Optimization Analysis", + "description": "Get detailed content optimization analysis for a specific content item in Profound" + }, + { + "name": "Prompt Volume", + "description": "Query prompt volume data to understand search demand across AI platforms in Profound" + }, + { + "name": "Citation Prompts", + "description": "Get prompts that cite a specific domain across AI platforms in Profound" + } + ], + "operationCount": 24, + "triggers": [], + "triggerCount": 0, + "authType": "api-key", + "category": "tools", + "integrationType": "analytics", + "tags": [ + "seo", + "data-analytics" + ] }, { "type": "pulse_v2", @@ -8627,7 +9154,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr"] + "tags": [ + "document-processing", + "ocr" + ] }, { "type": "qdrant", @@ -8658,7 +9188,10 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "quiver", @@ -8689,7 +9222,9 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": ["image-generation"] + "tags": [ + "image-generation" + ] }, { "type": "reddit", @@ -8776,7 +9311,10 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": ["content-management", "web-scraping"] + "tags": [ + "content-management", + "web-scraping" + ] }, { "type": "redis", @@ -8883,7 +9421,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "reducto_v2", @@ -8901,7 +9442,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr"] + "tags": [ + "document-processing", + "ocr" + ] }, { "type": "resend", @@ -8952,7 +9496,10 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "messaging"] + "tags": [ + "email-marketing", + "messaging" + ] }, { "type": "revenuecat", @@ -9011,7 +9558,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": ["payments", "subscriptions"] + "tags": [ + "payments", + "subscriptions" + ] }, { "type": "rippling", @@ -9106,7 +9656,9 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": ["hiring"] + "tags": [ + "hiring" + ] }, { "type": "s3", @@ -9145,7 +9697,10 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "salesforce", @@ -9304,7 +9859,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "customer-support"] + "tags": [ + "sales-engagement", + "customer-support" + ] }, { "type": "search", @@ -9322,7 +9880,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "seo"] + "tags": [ + "web-scraping", + "seo" + ] }, { "type": "sendgrid", @@ -9405,7 +9966,10 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "messaging"] + "tags": [ + "email-marketing", + "messaging" + ] }, { "type": "sentry", @@ -9472,7 +10036,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["error-tracking", "monitoring"] + "tags": [ + "error-tracking", + "monitoring" + ] }, { "type": "serper", @@ -9490,7 +10057,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "seo"] + "tags": [ + "web-scraping", + "seo" + ] }, { "type": "servicenow", @@ -9525,7 +10095,11 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "ticketing", "incident-management"] + "tags": [ + "customer-support", + "ticketing", + "incident-management" + ] }, { "type": "sftp", @@ -9568,7 +10142,10 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "automation"] + "tags": [ + "cloud", + "automation" + ] }, { "type": "sharepoint", @@ -9619,7 +10196,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["microsoft-365", "content-management", "document-processing"] + "tags": [ + "microsoft-365", + "content-management", + "document-processing" + ] }, { "type": "shopify", @@ -9722,7 +10303,10 @@ "authType": "oauth", "category": "tools", "integrationType": "ecommerce", - "tags": ["payments", "subscriptions"] + "tags": [ + "payments", + "subscriptions" + ] }, { "type": "similarweb", @@ -9761,7 +10345,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["marketing", "data-analytics", "seo"] + "tags": [ + "marketing", + "data-analytics", + "seo" + ] }, { "type": "slack", @@ -9886,7 +10474,11 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "webhooks", "automation"] + "tags": [ + "messaging", + "webhooks", + "automation" + ] }, { "type": "smtp", @@ -9904,7 +10496,10 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "messaging"] + "tags": [ + "email-marketing", + "messaging" + ] }, { "type": "stt_v2", @@ -9922,7 +10517,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["speech-to-text", "document-processing"] + "tags": [ + "speech-to-text", + "document-processing" + ] }, { "type": "ssh", @@ -9993,7 +10591,10 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "automation"] + "tags": [ + "cloud", + "automation" + ] }, { "type": "stagehand", @@ -10020,7 +10621,11 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation", "agentic"] + "tags": [ + "web-scraping", + "automation", + "agentic" + ] }, { "type": "stripe", @@ -10245,7 +10850,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": ["payments", "subscriptions", "webhooks"] + "tags": [ + "payments", + "subscriptions", + "webhooks" + ] }, { "type": "supabase", @@ -10352,7 +10961,11 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse", "vector-search"] + "tags": [ + "cloud", + "data-warehouse", + "vector-search" + ] }, { "type": "tavily", @@ -10387,7 +11000,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "enrichment"] + "tags": [ + "web-scraping", + "enrichment" + ] }, { "type": "telegram", @@ -10440,7 +11056,11 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "webhooks", "automation"] + "tags": [ + "messaging", + "webhooks", + "automation" + ] }, { "type": "tts", @@ -10458,7 +11078,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["text-to-speech", "llm"] + "tags": [ + "text-to-speech", + "llm" + ] }, { "type": "tinybird", @@ -10485,7 +11108,10 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "translate", @@ -10503,7 +11129,10 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "llm"] + "tags": [ + "document-processing", + "llm" + ] }, { "type": "trello", @@ -10546,7 +11175,10 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing"] + "tags": [ + "project-management", + "ticketing" + ] }, { "type": "twilio_sms", @@ -10564,7 +11196,10 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "automation"] + "tags": [ + "messaging", + "automation" + ] }, { "type": "twilio_voice", @@ -10601,7 +11236,10 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "text-to-speech"] + "tags": [ + "messaging", + "text-to-speech" + ] }, { "type": "typeform", @@ -10658,7 +11296,10 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": ["forms", "data-analytics"] + "tags": [ + "forms", + "data-analytics" + ] }, { "type": "upstash", @@ -10741,7 +11382,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "vercel", @@ -10960,7 +11604,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "ci-cd"] + "tags": [ + "cloud", + "ci-cd" + ] }, { "type": "video_generator_v2", @@ -10978,7 +11625,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["video-generation", "llm"] + "tags": [ + "video-generation", + "llm" + ] }, { "type": "vision_v2", @@ -10996,7 +11646,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "document-processing", "ocr"] + "tags": [ + "llm", + "document-processing", + "ocr" + ] }, { "type": "wealthbox", @@ -11039,7 +11693,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "customer-support"] + "tags": [ + "sales-engagement", + "customer-support" + ] }, { "type": "webflow", @@ -11099,7 +11756,10 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": ["content-management", "seo"] + "tags": [ + "content-management", + "seo" + ] }, { "type": "whatsapp", @@ -11123,7 +11783,10 @@ "authType": "api-key", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "automation"] + "tags": [ + "messaging", + "automation" + ] }, { "type": "wikipedia", @@ -11158,7 +11821,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["knowledge-base", "web-scraping"] + "tags": [ + "knowledge-base", + "web-scraping" + ] }, { "type": "wordpress", @@ -11281,7 +11947,10 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": ["content-management", "seo"] + "tags": [ + "content-management", + "seo" + ] }, { "type": "workday", @@ -11340,7 +12009,10 @@ "authType": "none", "category": "tools", "integrationType": "hr", - "tags": ["hiring", "project-management"] + "tags": [ + "hiring", + "project-management" + ] }, { "type": "x", @@ -11471,7 +12143,10 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": ["marketing", "messaging"] + "tags": [ + "marketing", + "messaging" + ] }, { "type": "youtube", @@ -11526,7 +12201,11 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["google-workspace", "marketing", "content-management"] + "tags": [ + "google-workspace", + "marketing", + "content-management" + ] }, { "type": "zendesk", @@ -11649,7 +12328,10 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "ticketing"] + "tags": [ + "customer-support", + "ticketing" + ] }, { "type": "zep", @@ -11704,7 +12386,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "knowledge-base", "agentic"] + "tags": [ + "llm", + "knowledge-base", + "agentic" + ] }, { "type": "zoom", @@ -11763,6 +12449,10 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["meeting", "calendar", "scheduling"] + "tags": [ + "meeting", + "calendar", + "scheduling" + ] } -] +] \ No newline at end of file diff --git a/apps/sim/blocks/blocks/profound.ts b/apps/sim/blocks/blocks/profound.ts new file mode 100644 index 00000000000..932c96dd6ef --- /dev/null +++ b/apps/sim/blocks/blocks/profound.ts @@ -0,0 +1,418 @@ +import { ProfoundIcon } from '@/components/icons' +import type { BlockConfig } from '@/blocks/types' +import { AuthMode, IntegrationType } from '@/blocks/types' + +const CATEGORY_REPORT_OPS = [ + 'visibility_report', + 'sentiment_report', + 'citations_report', + 'prompt_answers', + 'query_fanouts', +] as const + +const DOMAIN_REPORT_OPS = ['bots_report', 'referrals_report', 'raw_logs', 'bot_logs'] as const + +const ALL_REPORT_OPS = [...CATEGORY_REPORT_OPS, ...DOMAIN_REPORT_OPS] as const + +const CATEGORY_ID_OPS = [ + ...CATEGORY_REPORT_OPS, + 'category_topics', + 'category_tags', + 'category_prompts', + 'category_assets', + 'category_personas', +] as const + +const DATE_REQUIRED_CATEGORY_OPS = [ + 'visibility_report', + 'sentiment_report', + 'citations_report', + 'prompt_answers', + 'query_fanouts', + 'prompt_volume', +] as const + +const DATE_REQUIRED_ALL_OPS = [...DATE_REQUIRED_CATEGORY_OPS, ...DOMAIN_REPORT_OPS] as const + +const METRICS_REPORT_OPS = [ + 'visibility_report', + 'sentiment_report', + 'citations_report', + 'bots_report', + 'referrals_report', + 'query_fanouts', + 'prompt_volume', +] as const + +const DIMENSION_OPS = [ + 'visibility_report', + 'sentiment_report', + 'citations_report', + 'bots_report', + 'referrals_report', + 'query_fanouts', + 'raw_logs', + 'bot_logs', + 'prompt_volume', +] as const + +const FILTER_OPS = [...ALL_REPORT_OPS, 'prompt_answers', 'prompt_volume'] as const + +export const ProfoundBlock: BlockConfig = { + type: 'profound', + name: 'Profound', + description: 'AI visibility and analytics with Profound', + longDescription: + 'Track how your brand appears across AI platforms. Monitor visibility scores, sentiment, citations, bot traffic, referrals, content optimization, and prompt volumes with Profound.', + docsLink: 'https://docs.sim.ai/tools/profound', + category: 'tools', + integrationType: IntegrationType.Analytics, + tags: ['seo', 'data-analytics'], + bgColor: '#1A1A2E', + icon: ProfoundIcon, + authMode: AuthMode.ApiKey, + + subBlocks: [ + { + id: 'operation', + title: 'Operation', + type: 'dropdown', + options: [ + { label: 'List Categories', id: 'list_categories' }, + { label: 'List Regions', id: 'list_regions' }, + { label: 'List Models', id: 'list_models' }, + { label: 'List Domains', id: 'list_domains' }, + { label: 'List Assets', id: 'list_assets' }, + { label: 'List Personas', id: 'list_personas' }, + { label: 'Category Topics', id: 'category_topics' }, + { label: 'Category Tags', id: 'category_tags' }, + { label: 'Category Prompts', id: 'category_prompts' }, + { label: 'Category Assets', id: 'category_assets' }, + { label: 'Category Personas', id: 'category_personas' }, + { label: 'Visibility Report', id: 'visibility_report' }, + { label: 'Sentiment Report', id: 'sentiment_report' }, + { label: 'Citations Report', id: 'citations_report' }, + { label: 'Query Fanouts', id: 'query_fanouts' }, + { label: 'Prompt Answers', id: 'prompt_answers' }, + { label: 'Bots Report', id: 'bots_report' }, + { label: 'Referrals Report', id: 'referrals_report' }, + { label: 'Raw Logs', id: 'raw_logs' }, + { label: 'Bot Logs', id: 'bot_logs' }, + { label: 'List Optimizations', id: 'list_optimizations' }, + { label: 'Optimization Analysis', id: 'optimization_analysis' }, + { label: 'Prompt Volume', id: 'prompt_volume' }, + { label: 'Citation Prompts', id: 'citation_prompts' }, + ], + value: () => 'visibility_report', + }, + { + id: 'apiKey', + title: 'API Key', + type: 'short-input', + placeholder: 'Enter your Profound API key', + required: true, + password: true, + }, + + // Category ID - for category-based operations + { + id: 'categoryId', + title: 'Category ID', + type: 'short-input', + placeholder: 'Category UUID', + required: { field: 'operation', value: [...CATEGORY_ID_OPS] }, + condition: { field: 'operation', value: [...CATEGORY_ID_OPS] }, + }, + + // Domain - for domain-based operations + { + id: 'domain', + title: 'Domain', + type: 'short-input', + placeholder: 'e.g. example.com', + required: { field: 'operation', value: [...DOMAIN_REPORT_OPS] }, + condition: { field: 'operation', value: [...DOMAIN_REPORT_OPS] }, + }, + + // Input domain - for citation prompts + { + id: 'inputDomain', + title: 'Domain', + type: 'short-input', + placeholder: 'e.g. ramp.com', + required: { field: 'operation', value: 'citation_prompts' }, + condition: { field: 'operation', value: 'citation_prompts' }, + }, + + // Asset ID - for content optimization + { + id: 'assetId', + title: 'Asset ID', + type: 'short-input', + placeholder: 'Asset UUID', + required: { field: 'operation', value: ['list_optimizations', 'optimization_analysis'] }, + condition: { field: 'operation', value: ['list_optimizations', 'optimization_analysis'] }, + }, + + // Content ID - for optimization analysis + { + id: 'contentId', + title: 'Content ID', + type: 'short-input', + placeholder: 'Content/optimization UUID', + required: { field: 'operation', value: 'optimization_analysis' }, + condition: { field: 'operation', value: 'optimization_analysis' }, + }, + + // Date fields + { + id: 'startDate', + title: 'Start Date', + type: 'short-input', + placeholder: 'YYYY-MM-DD', + required: { field: 'operation', value: [...DATE_REQUIRED_ALL_OPS] }, + condition: { field: 'operation', value: [...DATE_REQUIRED_ALL_OPS] }, + wandConfig: { + enabled: true, + prompt: 'Generate a date in YYYY-MM-DD format. Return ONLY the date string.', + generationType: 'timestamp', + }, + }, + { + id: 'endDate', + title: 'End Date', + type: 'short-input', + placeholder: 'YYYY-MM-DD', + required: { field: 'operation', value: [...DATE_REQUIRED_CATEGORY_OPS] }, + condition: { field: 'operation', value: [...DATE_REQUIRED_ALL_OPS] }, + wandConfig: { + enabled: true, + prompt: 'Generate a date in YYYY-MM-DD format. Return ONLY the date string.', + generationType: 'timestamp', + }, + }, + + // Per-operation metrics fields + { + id: 'visibilityMetrics', + title: 'Metrics', + type: 'short-input', + placeholder: 'share_of_voice, visibility_score, mentions_count', + required: { field: 'operation', value: 'visibility_report' }, + condition: { field: 'operation', value: 'visibility_report' }, + }, + { + id: 'sentimentMetrics', + title: 'Metrics', + type: 'short-input', + placeholder: 'positive, negative, occurrences', + required: { field: 'operation', value: 'sentiment_report' }, + condition: { field: 'operation', value: 'sentiment_report' }, + }, + { + id: 'citationsMetrics', + title: 'Metrics', + type: 'short-input', + placeholder: 'count, citation_share', + required: { field: 'operation', value: 'citations_report' }, + condition: { field: 'operation', value: 'citations_report' }, + }, + { + id: 'botsMetrics', + title: 'Metrics', + type: 'short-input', + placeholder: 'count, citations, indexing, training', + required: { field: 'operation', value: 'bots_report' }, + condition: { field: 'operation', value: 'bots_report' }, + }, + { + id: 'referralsMetrics', + title: 'Metrics', + type: 'short-input', + placeholder: 'visits, last_visit', + required: { field: 'operation', value: 'referrals_report' }, + condition: { field: 'operation', value: 'referrals_report' }, + }, + { + id: 'fanoutsMetrics', + title: 'Metrics', + type: 'short-input', + placeholder: 'fanouts_per_execution, total_fanouts, share', + required: { field: 'operation', value: 'query_fanouts' }, + condition: { field: 'operation', value: 'query_fanouts' }, + }, + { + id: 'volumeMetrics', + title: 'Metrics', + type: 'short-input', + placeholder: 'volume, change', + required: { field: 'operation', value: 'prompt_volume' }, + condition: { field: 'operation', value: 'prompt_volume' }, + }, + + // Advanced fields + { + id: 'dimensions', + title: 'Dimensions', + type: 'short-input', + placeholder: 'e.g. date, asset_name, model', + condition: { field: 'operation', value: [...DIMENSION_OPS] }, + mode: 'advanced', + }, + { + id: 'dateInterval', + title: 'Date Interval', + type: 'dropdown', + options: [ + { label: 'Day', id: 'day' }, + { label: 'Hour', id: 'hour' }, + { label: 'Week', id: 'week' }, + { label: 'Month', id: 'month' }, + { label: 'Year', id: 'year' }, + ], + condition: { field: 'operation', value: [...METRICS_REPORT_OPS] }, + mode: 'advanced', + }, + { + id: 'filters', + title: 'Filters', + type: 'long-input', + placeholder: '[{"field":"asset_name","operator":"is","value":"Company"}]', + condition: { field: 'operation', value: [...FILTER_OPS] }, + mode: 'advanced', + wandConfig: { + enabled: true, + prompt: + 'Generate a JSON array of filter objects. Each object has "field", "operator", and "value" keys. Return ONLY valid JSON.', + generationType: 'json-object', + }, + }, + { + id: 'limit', + title: 'Limit', + type: 'short-input', + placeholder: '10000', + condition: { + field: 'operation', + value: [...FILTER_OPS, 'category_prompts', 'list_optimizations'], + }, + mode: 'advanced', + }, + + // Category prompts specific fields + { + id: 'cursor', + title: 'Cursor', + type: 'short-input', + placeholder: 'Pagination cursor from previous response', + condition: { field: 'operation', value: 'category_prompts' }, + mode: 'advanced', + }, + { + id: 'promptType', + title: 'Prompt Type', + type: 'short-input', + placeholder: 'visibility, sentiment', + condition: { field: 'operation', value: 'category_prompts' }, + mode: 'advanced', + }, + + // Optimization list specific + { + id: 'offset', + title: 'Offset', + type: 'short-input', + placeholder: '0', + condition: { field: 'operation', value: 'list_optimizations' }, + mode: 'advanced', + }, + ], + + tools: { + access: [ + 'profound_list_categories', + 'profound_list_regions', + 'profound_list_models', + 'profound_list_domains', + 'profound_list_assets', + 'profound_list_personas', + 'profound_category_topics', + 'profound_category_tags', + 'profound_category_prompts', + 'profound_category_assets', + 'profound_category_personas', + 'profound_visibility_report', + 'profound_sentiment_report', + 'profound_citations_report', + 'profound_query_fanouts', + 'profound_prompt_answers', + 'profound_bots_report', + 'profound_referrals_report', + 'profound_raw_logs', + 'profound_bot_logs', + 'profound_list_optimizations', + 'profound_optimization_analysis', + 'profound_prompt_volume', + 'profound_citation_prompts', + ], + config: { + tool: (params) => `profound_${params.operation}`, + params: (params) => { + const result: Record = {} + if (params.visibilityMetrics) result.metrics = params.visibilityMetrics + if (params.sentimentMetrics) result.metrics = params.sentimentMetrics + if (params.citationsMetrics) result.metrics = params.citationsMetrics + if (params.botsMetrics) result.metrics = params.botsMetrics + if (params.referralsMetrics) result.metrics = params.referralsMetrics + if (params.fanoutsMetrics) result.metrics = params.fanoutsMetrics + if (params.volumeMetrics) result.metrics = params.volumeMetrics + if (params.limit) result.limit = Number(params.limit) + if (params.offset) result.offset = Number(params.offset) + return result + }, + }, + }, + + inputs: { + apiKey: { type: 'string', required: true }, + categoryId: { type: 'string', required: false }, + domain: { type: 'string', required: false }, + inputDomain: { type: 'string', required: false }, + assetId: { type: 'string', required: false }, + contentId: { type: 'string', required: false }, + startDate: { type: 'string', required: false }, + endDate: { type: 'string', required: false }, + metrics: { type: 'string', required: false }, + dimensions: { type: 'string', required: false }, + dateInterval: { type: 'string', required: false }, + filters: { type: 'string', required: false }, + limit: { type: 'number', required: false }, + offset: { type: 'number', required: false }, + cursor: { type: 'string', required: false }, + promptType: { type: 'string', required: false }, + }, + + outputs: { + response: { + type: { + totalRows: 'number', + data: 'json', + categories: 'json', + regions: 'json', + models: 'json', + domains: 'json', + assets: 'json', + personas: 'json', + topics: 'json', + tags: 'json', + prompts: 'json', + optimizations: 'json', + content: 'json', + aeoContentScore: 'json', + analysis: 'json', + recommendations: 'json', + nextCursor: 'string', + }, + }, + }, +} diff --git a/apps/sim/blocks/registry.ts b/apps/sim/blocks/registry.ts index ff9fd2dc2c0..1461cd58a60 100644 --- a/apps/sim/blocks/registry.ts +++ b/apps/sim/blocks/registry.ts @@ -137,6 +137,7 @@ import { PipedriveBlock } from '@/blocks/blocks/pipedrive' import { PolymarketBlock } from '@/blocks/blocks/polymarket' import { PostgreSQLBlock } from '@/blocks/blocks/postgresql' import { PostHogBlock } from '@/blocks/blocks/posthog' +import { ProfoundBlock } from '@/blocks/blocks/profound' import { PulseBlock, PulseV2Block } from '@/blocks/blocks/pulse' import { QdrantBlock } from '@/blocks/blocks/qdrant' import { QuiverBlock } from '@/blocks/blocks/quiver' @@ -357,6 +358,7 @@ export const registry: Record = { perplexity: PerplexityBlock, pinecone: PineconeBlock, pipedrive: PipedriveBlock, + profound: ProfoundBlock, polymarket: PolymarketBlock, postgresql: PostgreSQLBlock, posthog: PostHogBlock, diff --git a/apps/sim/components/icons.tsx b/apps/sim/components/icons.tsx index b79a166e901..6f53db86f8b 100644 --- a/apps/sim/components/icons.tsx +++ b/apps/sim/components/icons.tsx @@ -1285,6 +1285,17 @@ export function StartIcon(props: SVGProps) { ) } +export function ProfoundIcon(props: SVGProps) { + return ( + + + + ) +} + export function PineconeIcon(props: SVGProps) { return ( = { + id: 'profound_bot_logs', + name: 'Profound Bot Logs', + description: 'Get identified bot visit logs with filters for a domain in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + domain: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Domain to query bot logs for (e.g. example.com)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601). Defaults to now', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'Comma-separated dimensions: timestamp, method, host, path, status_code, ip, user_agent, referer, bytes_sent, duration_ms, query_params, bot_name, bot_provider, bot_types', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"bot_name","operator":"is","value":"GPTBot"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/logs/raw/bots', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + domain: params.domain, + start_date: params.startDate, + metrics: ['count'], + } + if (params.endDate) { + body.end_date = params.endDate + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to get bot logs') + } + if (Array.isArray(data)) { + return { + success: true, + output: { + totalRows: data.length, + data: data.map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of bot log entries', + }, + data: { + type: 'json', + description: 'Bot log data rows with metrics and dimension values', + properties: { + metrics: { type: 'json', description: 'Array of metric values (count)' }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/bots-report.ts b/apps/sim/tools/profound/bots-report.ts new file mode 100644 index 00000000000..b855e476c40 --- /dev/null +++ b/apps/sim/tools/profound/bots-report.ts @@ -0,0 +1,141 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundBotsReportParams, ProfoundBotsReportResponse } from './types' + +export const profoundBotsReportTool: ToolConfig< + ProfoundBotsReportParams, + ProfoundBotsReportResponse +> = { + id: 'profound_bots_report', + name: 'Profound Bots Report', + description: 'Query bot traffic report with hourly granularity for a domain in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + domain: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Domain to query bot traffic for (e.g. example.com)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601). Defaults to now', + }, + metrics: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Comma-separated metrics: count, citations, indexing, training, last_visit', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated dimensions: date, hour, path, bot_name, bot_provider, bot_type', + }, + dateInterval: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Date interval: hour, day, week, month, year', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"bot_name","operator":"is","value":"GPTBot"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v2/reports/bots', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + domain: params.domain, + start_date: params.startDate, + metrics: params.metrics.split(',').map((m) => m.trim()), + } + if (params.endDate) { + body.end_date = params.endDate + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.dateInterval) { + body.date_interval = params.dateInterval + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to query bots report') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of rows in the report', + }, + data: { + type: 'json', + description: 'Report data rows with metrics and dimension values', + properties: { + metrics: { + type: 'json', + description: 'Array of metric values matching requested metrics order', + }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/category-assets.ts b/apps/sim/tools/profound/category-assets.ts new file mode 100644 index 00000000000..ae53f6c0fc5 --- /dev/null +++ b/apps/sim/tools/profound/category-assets.ts @@ -0,0 +1,84 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundCategoryAssetsParams, ProfoundCategoryAssetsResponse } from './types' + +export const profoundCategoryAssetsTool: ToolConfig< + ProfoundCategoryAssetsParams, + ProfoundCategoryAssetsResponse +> = { + id: 'profound_category_assets', + name: 'Profound Category Assets', + description: 'List assets (companies/brands) for a specific category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + }, + + request: { + url: (params) => + `https://api.tryprofound.com/v1/org/categories/${encodeURIComponent(params.categoryId)}/assets`, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list category assets') + } + return { + success: true, + output: { + assets: (data ?? []).map( + (item: { + id: string + name: string + website: string + alternate_domains: string[] | null + is_owned: boolean + created_at: string + logo_url: string + }) => ({ + id: item.id ?? null, + name: item.name ?? null, + website: item.website ?? null, + alternateDomains: item.alternate_domains ?? null, + isOwned: item.is_owned ?? false, + createdAt: item.created_at ?? null, + logoUrl: item.logo_url ?? null, + }) + ), + }, + } + }, + + outputs: { + assets: { + type: 'json', + description: 'List of assets in the category', + properties: { + id: { type: 'string', description: 'Asset ID' }, + name: { type: 'string', description: 'Asset/company name' }, + website: { type: 'string', description: 'Website URL' }, + alternateDomains: { type: 'json', description: 'Alternate domain names' }, + isOwned: { type: 'boolean', description: 'Whether the asset is owned by the organization' }, + createdAt: { type: 'string', description: 'When the asset was created' }, + logoUrl: { type: 'string', description: 'URL of the asset logo' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/category-personas.ts b/apps/sim/tools/profound/category-personas.ts new file mode 100644 index 00000000000..5a9ec046d4d --- /dev/null +++ b/apps/sim/tools/profound/category-personas.ts @@ -0,0 +1,98 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundCategoryPersonasParams, ProfoundCategoryPersonasResponse } from './types' + +export const profoundCategoryPersonasTool: ToolConfig< + ProfoundCategoryPersonasParams, + ProfoundCategoryPersonasResponse +> = { + id: 'profound_category_personas', + name: 'Profound Category Personas', + description: 'List personas for a specific category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + }, + + request: { + url: (params) => + `https://api.tryprofound.com/v1/org/categories/${encodeURIComponent(params.categoryId)}/personas`, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list category personas') + } + return { + success: true, + output: { + personas: (data.data ?? []).map( + (item: { + id: string + name: string + persona: { + behavior: { painPoints: string | null; motivations: string | null } + employment: { + industry: string[] + jobTitle: string[] + companySize: string[] + roleSeniority: string[] + } + demographics: { ageRange: string[] } + } + }) => ({ + id: item.id ?? null, + name: item.name ?? null, + persona: { + behavior: { + painPoints: item.persona?.behavior?.painPoints ?? null, + motivations: item.persona?.behavior?.motivations ?? null, + }, + employment: { + industry: item.persona?.employment?.industry ?? [], + jobTitle: item.persona?.employment?.jobTitle ?? [], + companySize: item.persona?.employment?.companySize ?? [], + roleSeniority: item.persona?.employment?.roleSeniority ?? [], + }, + demographics: { + ageRange: item.persona?.demographics?.ageRange ?? [], + }, + }, + }) + ), + }, + } + }, + + outputs: { + personas: { + type: 'json', + description: 'List of personas in the category', + properties: { + id: { type: 'string', description: 'Persona ID' }, + name: { type: 'string', description: 'Persona name' }, + persona: { + type: 'json', + description: 'Persona profile with behavior, employment, and demographics', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/category-prompts.ts b/apps/sim/tools/profound/category-prompts.ts new file mode 100644 index 00000000000..8f3f6a10672 --- /dev/null +++ b/apps/sim/tools/profound/category-prompts.ts @@ -0,0 +1,189 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundCategoryPromptsParams, ProfoundCategoryPromptsResponse } from './types' + +export const profoundCategoryPromptsTool: ToolConfig< + ProfoundCategoryPromptsParams, + ProfoundCategoryPromptsResponse +> = { + id: 'profound_category_prompts', + name: 'Profound Category Prompts', + description: 'List prompts for a specific category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 10000)', + }, + cursor: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Pagination cursor from previous response', + }, + orderDir: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Sort direction: asc or desc (default desc)', + }, + promptType: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated prompt types to filter: visibility, sentiment', + }, + topicId: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated topic IDs (UUIDs) to filter by', + }, + tagId: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated tag IDs (UUIDs) to filter by', + }, + regionId: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated region IDs (UUIDs) to filter by', + }, + platformId: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated platform IDs (UUIDs) to filter by', + }, + }, + + request: { + url: (params) => { + const url = new URL( + `https://api.tryprofound.com/v1/org/categories/${encodeURIComponent(params.categoryId)}/prompts` + ) + if (params.limit) url.searchParams.set('limit', String(params.limit)) + if (params.cursor) url.searchParams.set('cursor', params.cursor) + if (params.orderDir) url.searchParams.set('order_dir', params.orderDir) + if (params.promptType) { + for (const pt of params.promptType.split(',').map((s) => s.trim())) { + url.searchParams.append('prompt_type', pt) + } + } + if (params.topicId) { + for (const tid of params.topicId.split(',').map((s) => s.trim())) { + url.searchParams.append('topic_id', tid) + } + } + if (params.tagId) { + for (const tid of params.tagId.split(',').map((s) => s.trim())) { + url.searchParams.append('tag_id', tid) + } + } + if (params.regionId) { + for (const rid of params.regionId.split(',').map((s) => s.trim())) { + url.searchParams.append('region_id', rid) + } + } + if (params.platformId) { + for (const pid of params.platformId.split(',').map((s) => s.trim())) { + url.searchParams.append('platform_id', pid) + } + } + return url.toString() + }, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list category prompts') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + nextCursor: data.info?.next_cursor ?? null, + prompts: (data.data ?? []).map( + (item: { + id: string + prompt: string + prompt_type: string + topic: { id: string; name: string } + tags: Array<{ id: string; name: string }> + regions: Array<{ id: string; name: string }> + platforms: Array<{ id: string; name: string }> + created_at: string + }) => ({ + id: item.id ?? null, + prompt: item.prompt ?? null, + promptType: item.prompt_type ?? null, + topicId: item.topic?.id ?? null, + topicName: item.topic?.name ?? null, + tags: (item.tags ?? []).map((t: { id: string; name: string }) => ({ + id: t.id ?? null, + name: t.name ?? null, + })), + regions: (item.regions ?? []).map((r: { id: string; name: string }) => ({ + id: r.id ?? null, + name: r.name ?? null, + })), + platforms: (item.platforms ?? []).map((p: { id: string; name: string }) => ({ + id: p.id ?? null, + name: p.name ?? null, + })), + createdAt: item.created_at ?? null, + }) + ), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of prompts', + }, + nextCursor: { + type: 'string', + description: 'Cursor for next page of results', + optional: true, + }, + prompts: { + type: 'json', + description: 'List of prompts', + properties: { + id: { type: 'string', description: 'Prompt ID' }, + prompt: { type: 'string', description: 'Prompt text' }, + promptType: { type: 'string', description: 'Prompt type (visibility or sentiment)' }, + topicId: { type: 'string', description: 'Topic ID' }, + topicName: { type: 'string', description: 'Topic name' }, + tags: { type: 'json', description: 'Associated tags' }, + regions: { type: 'json', description: 'Associated regions' }, + platforms: { type: 'json', description: 'Associated platforms' }, + createdAt: { type: 'string', description: 'When the prompt was created' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/category-tags.ts b/apps/sim/tools/profound/category-tags.ts new file mode 100644 index 00000000000..138e5f21351 --- /dev/null +++ b/apps/sim/tools/profound/category-tags.ts @@ -0,0 +1,64 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundCategoryTagsParams, ProfoundCategoryTagsResponse } from './types' + +export const profoundCategoryTagsTool: ToolConfig< + ProfoundCategoryTagsParams, + ProfoundCategoryTagsResponse +> = { + id: 'profound_category_tags', + name: 'Profound Category Tags', + description: 'List tags for a specific category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + }, + + request: { + url: (params) => + `https://api.tryprofound.com/v1/org/categories/${encodeURIComponent(params.categoryId)}/tags`, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list category tags') + } + return { + success: true, + output: { + tags: (data ?? []).map((item: { id: string; name: string }) => ({ + id: item.id ?? null, + name: item.name ?? null, + })), + }, + } + }, + + outputs: { + tags: { + type: 'json', + description: 'List of tags in the category', + properties: { + id: { type: 'string', description: 'Tag ID (UUID)' }, + name: { type: 'string', description: 'Tag name' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/category-topics.ts b/apps/sim/tools/profound/category-topics.ts new file mode 100644 index 00000000000..e39d51ffb66 --- /dev/null +++ b/apps/sim/tools/profound/category-topics.ts @@ -0,0 +1,64 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundCategoryTopicsParams, ProfoundCategoryTopicsResponse } from './types' + +export const profoundCategoryTopicsTool: ToolConfig< + ProfoundCategoryTopicsParams, + ProfoundCategoryTopicsResponse +> = { + id: 'profound_category_topics', + name: 'Profound Category Topics', + description: 'List topics for a specific category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + }, + + request: { + url: (params) => + `https://api.tryprofound.com/v1/org/categories/${encodeURIComponent(params.categoryId)}/topics`, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list category topics') + } + return { + success: true, + output: { + topics: (data ?? []).map((item: { id: string; name: string }) => ({ + id: item.id ?? null, + name: item.name ?? null, + })), + }, + } + }, + + outputs: { + topics: { + type: 'json', + description: 'List of topics in the category', + properties: { + id: { type: 'string', description: 'Topic ID (UUID)' }, + name: { type: 'string', description: 'Topic name' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/citation-prompts.ts b/apps/sim/tools/profound/citation-prompts.ts new file mode 100644 index 00000000000..31b02b68677 --- /dev/null +++ b/apps/sim/tools/profound/citation-prompts.ts @@ -0,0 +1,60 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundCitationPromptsParams, ProfoundCitationPromptsResponse } from './types' + +export const profoundCitationPromptsTool: ToolConfig< + ProfoundCitationPromptsParams, + ProfoundCitationPromptsResponse +> = { + id: 'profound_citation_prompts', + name: 'Profound Citation Prompts', + description: 'Get prompts that cite a specific domain across AI platforms in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + inputDomain: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Domain to look up citations for (e.g. ramp.com)', + }, + }, + + request: { + url: (params) => { + const url = new URL('https://api.tryprofound.com/v1/prompt-volumes/citation-prompts') + url.searchParams.set('input_domain', params.inputDomain) + return url.toString() + }, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to get citation prompts') + } + return { + success: true, + output: { + data: data ?? null, + }, + } + }, + + outputs: { + data: { + type: 'json', + description: 'Citation prompt data for the queried domain', + }, + }, +} diff --git a/apps/sim/tools/profound/citations-report.ts b/apps/sim/tools/profound/citations-report.ts new file mode 100644 index 00000000000..ef973f2d2c5 --- /dev/null +++ b/apps/sim/tools/profound/citations-report.ts @@ -0,0 +1,140 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundCitationsReportParams, ProfoundCitationsReportResponse } from './types' + +export const profoundCitationsReportTool: ToolConfig< + ProfoundCitationsReportParams, + ProfoundCitationsReportResponse +> = { + id: 'profound_citations_report', + name: 'Profound Citations Report', + description: 'Query citations report for a category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601)', + }, + metrics: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Comma-separated metrics: count, citation_share', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'Comma-separated dimensions: hostname, path, date, region, topic, model, tag, prompt, url, root_domain, persona, citation_category', + }, + dateInterval: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Date interval: hour, day, week, month, year', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"hostname","operator":"is","value":"example.com"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/reports/citations', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + category_id: params.categoryId, + start_date: params.startDate, + end_date: params.endDate, + metrics: params.metrics.split(',').map((m) => m.trim()), + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.dateInterval) { + body.date_interval = params.dateInterval + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to query citations report') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of rows in the report', + }, + data: { + type: 'json', + description: 'Report data rows with metrics and dimension values', + properties: { + metrics: { + type: 'json', + description: 'Array of metric values matching requested metrics order', + }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/index.ts b/apps/sim/tools/profound/index.ts new file mode 100644 index 00000000000..c272eb5736d --- /dev/null +++ b/apps/sim/tools/profound/index.ts @@ -0,0 +1,24 @@ +export { profoundBotLogsTool } from './bot-logs' +export { profoundBotsReportTool } from './bots-report' +export { profoundCategoryAssetsTool } from './category-assets' +export { profoundCategoryPersonasTool } from './category-personas' +export { profoundCategoryPromptsTool } from './category-prompts' +export { profoundCategoryTagsTool } from './category-tags' +export { profoundCategoryTopicsTool } from './category-topics' +export { profoundCitationPromptsTool } from './citation-prompts' +export { profoundCitationsReportTool } from './citations-report' +export { profoundListAssetsTool } from './list-assets' +export { profoundListCategoriesTool } from './list-categories' +export { profoundListDomainsTool } from './list-domains' +export { profoundListModelsTool } from './list-models' +export { profoundListOptimizationsTool } from './list-optimizations' +export { profoundListPersonasTool } from './list-personas' +export { profoundListRegionsTool } from './list-regions' +export { profoundOptimizationAnalysisTool } from './optimization-analysis' +export { profoundPromptAnswersTool } from './prompt-answers' +export { profoundPromptVolumeTool } from './prompt-volume' +export { profoundQueryFanoutsTool } from './query-fanouts' +export { profoundRawLogsTool } from './raw-logs' +export { profoundReferralsReportTool } from './referrals-report' +export { profoundSentimentReportTool } from './sentiment-report' +export { profoundVisibilityReportTool } from './visibility-report' diff --git a/apps/sim/tools/profound/list-assets.ts b/apps/sim/tools/profound/list-assets.ts new file mode 100644 index 00000000000..b528a9c013b --- /dev/null +++ b/apps/sim/tools/profound/list-assets.ts @@ -0,0 +1,85 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundListAssetsParams, ProfoundListAssetsResponse } from './types' + +export const profoundListAssetsTool: ToolConfig< + ProfoundListAssetsParams, + ProfoundListAssetsResponse +> = { + id: 'profound_list_assets', + name: 'Profound List Assets', + description: 'List all organization assets (companies/brands) across all categories in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/org/assets', + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list assets') + } + return { + success: true, + output: { + assets: (data.data ?? []).map( + (item: { + id: string + name: string + website: string + alternate_domains: string[] | null + is_owned: boolean + created_at: string + logo_url: string + category: { id: string; name: string } + }) => ({ + id: item.id ?? null, + name: item.name ?? null, + website: item.website ?? null, + alternateDomains: item.alternate_domains ?? null, + isOwned: item.is_owned ?? false, + createdAt: item.created_at ?? null, + logoUrl: item.logo_url ?? null, + categoryId: item.category?.id ?? null, + categoryName: item.category?.name ?? null, + }) + ), + }, + } + }, + + outputs: { + assets: { + type: 'json', + description: 'List of organization assets with category info', + properties: { + id: { type: 'string', description: 'Asset ID' }, + name: { type: 'string', description: 'Asset/company name' }, + website: { type: 'string', description: 'Asset website URL' }, + alternateDomains: { type: 'json', description: 'Alternate domain names' }, + isOwned: { + type: 'boolean', + description: 'Whether this asset is owned by the organization', + }, + createdAt: { type: 'string', description: 'When the asset was created' }, + logoUrl: { type: 'string', description: 'URL of the asset logo' }, + categoryId: { type: 'string', description: 'Category ID the asset belongs to' }, + categoryName: { type: 'string', description: 'Category name' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/list-categories.ts b/apps/sim/tools/profound/list-categories.ts new file mode 100644 index 00000000000..29f5ab5eb17 --- /dev/null +++ b/apps/sim/tools/profound/list-categories.ts @@ -0,0 +1,57 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundListCategoriesParams, ProfoundListCategoriesResponse } from './types' + +export const profoundListCategoriesTool: ToolConfig< + ProfoundListCategoriesParams, + ProfoundListCategoriesResponse +> = { + id: 'profound_list_categories', + name: 'Profound List Categories', + description: 'List all organization categories in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/org/categories', + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list categories') + } + return { + success: true, + output: { + categories: (data ?? []).map((item: { id: string; name: string }) => ({ + id: item.id ?? null, + name: item.name ?? null, + })), + }, + } + }, + + outputs: { + categories: { + type: 'json', + description: 'List of organization categories', + properties: { + id: { type: 'string', description: 'Category ID' }, + name: { type: 'string', description: 'Category name' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/list-domains.ts b/apps/sim/tools/profound/list-domains.ts new file mode 100644 index 00000000000..b723bffbcb7 --- /dev/null +++ b/apps/sim/tools/profound/list-domains.ts @@ -0,0 +1,59 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundListDomainsParams, ProfoundListDomainsResponse } from './types' + +export const profoundListDomainsTool: ToolConfig< + ProfoundListDomainsParams, + ProfoundListDomainsResponse +> = { + id: 'profound_list_domains', + name: 'Profound List Domains', + description: 'List all organization domains in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/org/domains', + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list domains') + } + return { + success: true, + output: { + domains: (data ?? []).map((item: { id: string; name: string; created_at: string }) => ({ + id: item.id ?? null, + name: item.name ?? null, + createdAt: item.created_at ?? null, + })), + }, + } + }, + + outputs: { + domains: { + type: 'json', + description: 'List of organization domains', + properties: { + id: { type: 'string', description: 'Domain ID (UUID)' }, + name: { type: 'string', description: 'Domain name' }, + createdAt: { type: 'string', description: 'When the domain was added' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/list-models.ts b/apps/sim/tools/profound/list-models.ts new file mode 100644 index 00000000000..a1cc9da54a4 --- /dev/null +++ b/apps/sim/tools/profound/list-models.ts @@ -0,0 +1,57 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundListModelsParams, ProfoundListModelsResponse } from './types' + +export const profoundListModelsTool: ToolConfig< + ProfoundListModelsParams, + ProfoundListModelsResponse +> = { + id: 'profound_list_models', + name: 'Profound List Models', + description: 'List all AI models/platforms tracked in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/org/models', + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list models') + } + return { + success: true, + output: { + models: (data ?? []).map((item: { id: string; name: string }) => ({ + id: item.id ?? null, + name: item.name ?? null, + })), + }, + } + }, + + outputs: { + models: { + type: 'json', + description: 'List of AI models/platforms', + properties: { + id: { type: 'string', description: 'Model ID (UUID)' }, + name: { type: 'string', description: 'Model/platform name' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/list-optimizations.ts b/apps/sim/tools/profound/list-optimizations.ts new file mode 100644 index 00000000000..7c36c8adcbf --- /dev/null +++ b/apps/sim/tools/profound/list-optimizations.ts @@ -0,0 +1,104 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundListOptimizationsParams, ProfoundListOptimizationsResponse } from './types' + +export const profoundListOptimizationsTool: ToolConfig< + ProfoundListOptimizationsParams, + ProfoundListOptimizationsResponse +> = { + id: 'profound_list_optimizations', + name: 'Profound List Optimizations', + description: 'List content optimization entries for an asset in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + assetId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Asset ID (UUID)', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + offset: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Offset for pagination (default 0)', + }, + }, + + request: { + url: (params) => { + const url = new URL( + `https://api.tryprofound.com/v1/content/${encodeURIComponent(params.assetId)}/optimization` + ) + if (params.limit) url.searchParams.set('limit', String(params.limit)) + if (params.offset) url.searchParams.set('offset', String(params.offset)) + return url.toString() + }, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list optimizations') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + optimizations: (data.data ?? []).map( + (item: { + id: string + title: string + created_at: string + extracted_input: string | null + type: string + status: string + }) => ({ + id: item.id ?? null, + title: item.title ?? null, + createdAt: item.created_at ?? null, + extractedInput: item.extracted_input ?? null, + type: item.type ?? null, + status: item.status ?? null, + }) + ), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of optimization entries', + }, + optimizations: { + type: 'json', + description: 'List of content optimization entries', + properties: { + id: { type: 'string', description: 'Optimization ID (UUID)' }, + title: { type: 'string', description: 'Content title' }, + createdAt: { type: 'string', description: 'When the optimization was created' }, + extractedInput: { type: 'string', description: 'Extracted input text' }, + type: { type: 'string', description: 'Content type: file, text, or url' }, + status: { type: 'string', description: 'Optimization status' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/list-personas.ts b/apps/sim/tools/profound/list-personas.ts new file mode 100644 index 00000000000..31aac7b8dc6 --- /dev/null +++ b/apps/sim/tools/profound/list-personas.ts @@ -0,0 +1,96 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundListPersonasParams, ProfoundListPersonasResponse } from './types' + +export const profoundListPersonasTool: ToolConfig< + ProfoundListPersonasParams, + ProfoundListPersonasResponse +> = { + id: 'profound_list_personas', + name: 'Profound List Personas', + description: 'List all organization personas across all categories in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/org/personas', + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list personas') + } + return { + success: true, + output: { + personas: (data.data ?? []).map( + (item: { + id: string + name: string + category: { id: string; name: string } + persona: { + behavior: { painPoints: string | null; motivations: string | null } + employment: { + industry: string[] + jobTitle: string[] + companySize: string[] + roleSeniority: string[] + } + demographics: { ageRange: string[] } + } + }) => ({ + id: item.id ?? null, + name: item.name ?? null, + categoryId: item.category?.id ?? null, + categoryName: item.category?.name ?? null, + persona: { + behavior: { + painPoints: item.persona?.behavior?.painPoints ?? null, + motivations: item.persona?.behavior?.motivations ?? null, + }, + employment: { + industry: item.persona?.employment?.industry ?? [], + jobTitle: item.persona?.employment?.jobTitle ?? [], + companySize: item.persona?.employment?.companySize ?? [], + roleSeniority: item.persona?.employment?.roleSeniority ?? [], + }, + demographics: { + ageRange: item.persona?.demographics?.ageRange ?? [], + }, + }, + }) + ), + }, + } + }, + + outputs: { + personas: { + type: 'json', + description: 'List of organization personas with profile details', + properties: { + id: { type: 'string', description: 'Persona ID' }, + name: { type: 'string', description: 'Persona name' }, + categoryId: { type: 'string', description: 'Category ID' }, + categoryName: { type: 'string', description: 'Category name' }, + persona: { + type: 'json', + description: 'Persona profile with behavior, employment, and demographics', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/list-regions.ts b/apps/sim/tools/profound/list-regions.ts new file mode 100644 index 00000000000..f3cc60b5535 --- /dev/null +++ b/apps/sim/tools/profound/list-regions.ts @@ -0,0 +1,57 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundListRegionsParams, ProfoundListRegionsResponse } from './types' + +export const profoundListRegionsTool: ToolConfig< + ProfoundListRegionsParams, + ProfoundListRegionsResponse +> = { + id: 'profound_list_regions', + name: 'Profound List Regions', + description: 'List all organization regions in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/org/regions', + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to list regions') + } + return { + success: true, + output: { + regions: (data ?? []).map((item: { id: string; name: string }) => ({ + id: item.id ?? null, + name: item.name ?? null, + })), + }, + } + }, + + outputs: { + regions: { + type: 'json', + description: 'List of organization regions', + properties: { + id: { type: 'string', description: 'Region ID (UUID)' }, + name: { type: 'string', description: 'Region name' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/optimization-analysis.ts b/apps/sim/tools/profound/optimization-analysis.ts new file mode 100644 index 00000000000..b2d64606384 --- /dev/null +++ b/apps/sim/tools/profound/optimization-analysis.ts @@ -0,0 +1,161 @@ +import type { ToolConfig } from '@/tools/types' +import type { + ProfoundOptimizationAnalysisParams, + ProfoundOptimizationAnalysisResponse, +} from './types' + +export const profoundOptimizationAnalysisTool: ToolConfig< + ProfoundOptimizationAnalysisParams, + ProfoundOptimizationAnalysisResponse +> = { + id: 'profound_optimization_analysis', + name: 'Profound Optimization Analysis', + description: 'Get detailed content optimization analysis for a specific content item in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + assetId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Asset ID (UUID)', + }, + contentId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Content/optimization ID (UUID)', + }, + }, + + request: { + url: (params) => + `https://api.tryprofound.com/v1/content/${encodeURIComponent(params.assetId)}/optimization/${encodeURIComponent(params.contentId)}`, + method: 'GET', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + Accept: 'application/json', + }), + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to get optimization analysis') + } + const analysis = data.data + return { + success: true, + output: { + content: { + format: analysis?.content?.format ?? null, + value: analysis?.content?.value ?? null, + }, + aeoContentScore: analysis?.aeo_content_score + ? { + value: analysis.aeo_content_score.value ?? 0, + targetZone: { + low: analysis.aeo_content_score.target_zone?.low ?? 0, + high: analysis.aeo_content_score.target_zone?.high ?? 0, + }, + } + : null, + analysis: { + breakdown: (analysis?.analysis?.breakdown ?? []).map( + (b: { title: string; weight: number; score: number }) => ({ + title: b.title ?? null, + weight: b.weight ?? 0, + score: b.score ?? 0, + }) + ), + }, + recommendations: (analysis?.recommendations ?? []).map( + (r: { + title: string + status: string + impact: { section: string; score: number } | null + suggestion: { text: string; rationale: string } + }) => ({ + title: r.title ?? null, + status: r.status ?? null, + impact: r.impact + ? { + section: r.impact.section ?? null, + score: r.impact.score ?? 0, + } + : null, + suggestion: { + text: r.suggestion?.text ?? null, + rationale: r.suggestion?.rationale ?? null, + }, + }) + ), + }, + } + }, + + outputs: { + content: { + type: 'json', + description: 'The analyzed content', + properties: { + format: { type: 'string', description: 'Content format: markdown or html' }, + value: { type: 'string', description: 'Content text' }, + }, + }, + aeoContentScore: { + type: 'json', + description: 'AEO content score with target zone', + optional: true, + properties: { + value: { type: 'number', description: 'AEO score value' }, + targetZone: { + type: 'json', + description: 'Target zone range', + properties: { + low: { type: 'number', description: 'Low end of target range' }, + high: { type: 'number', description: 'High end of target range' }, + }, + }, + }, + }, + analysis: { + type: 'json', + description: 'Analysis breakdown by category', + properties: { + breakdown: { + type: 'json', + description: 'Array of scoring breakdowns', + properties: { + title: { type: 'string', description: 'Category title' }, + weight: { type: 'number', description: 'Category weight' }, + score: { type: 'number', description: 'Category score' }, + }, + }, + }, + }, + recommendations: { + type: 'json', + description: 'Content optimization recommendations', + properties: { + title: { type: 'string', description: 'Recommendation title' }, + status: { type: 'string', description: 'Status: done or pending' }, + impact: { type: 'json', description: 'Impact details with section and score' }, + suggestion: { + type: 'json', + description: 'Suggestion text and rationale', + properties: { + text: { type: 'string', description: 'Suggestion text' }, + rationale: { type: 'string', description: 'Why this recommendation matters' }, + }, + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/prompt-answers.ts b/apps/sim/tools/profound/prompt-answers.ts new file mode 100644 index 00000000000..1fc847d68aa --- /dev/null +++ b/apps/sim/tools/profound/prompt-answers.ts @@ -0,0 +1,137 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundPromptAnswersParams, ProfoundPromptAnswersResponse } from './types' + +export const profoundPromptAnswersTool: ToolConfig< + ProfoundPromptAnswersParams, + ProfoundPromptAnswersResponse +> = { + id: 'profound_prompt_answers', + name: 'Profound Prompt Answers', + description: 'Get raw prompt answers data for a category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601)', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"prompt_type","operator":"is","value":"visibility"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/prompts/answers', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + category_id: params.categoryId, + start_date: params.startDate, + end_date: params.endDate, + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to get prompt answers') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map( + (row: { + prompt: string | null + prompt_type: string | null + response: string | null + mentions: string[] | null + citations: string[] | null + topic: string | null + region: string | null + model: string | null + asset: string | null + created_at: string | null + }) => ({ + prompt: row.prompt ?? null, + promptType: row.prompt_type ?? null, + response: row.response ?? null, + mentions: row.mentions ?? [], + citations: row.citations ?? [], + topic: row.topic ?? null, + region: row.region ?? null, + model: row.model ?? null, + asset: row.asset ?? null, + createdAt: row.created_at ?? null, + }) + ), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of answer rows', + }, + data: { + type: 'json', + description: 'Raw prompt answer data', + properties: { + prompt: { type: 'string', description: 'The prompt text' }, + promptType: { type: 'string', description: 'Prompt type (visibility or sentiment)' }, + response: { type: 'string', description: 'AI model response text' }, + mentions: { type: 'json', description: 'Companies/assets mentioned in the response' }, + citations: { type: 'json', description: 'URLs cited in the response' }, + topic: { type: 'string', description: 'Topic name' }, + region: { type: 'string', description: 'Region name' }, + model: { type: 'string', description: 'AI model/platform name' }, + asset: { type: 'string', description: 'Asset name' }, + createdAt: { type: 'string', description: 'Timestamp when the answer was collected' }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/prompt-volume.ts b/apps/sim/tools/profound/prompt-volume.ts new file mode 100644 index 00000000000..c74fa19bf92 --- /dev/null +++ b/apps/sim/tools/profound/prompt-volume.ts @@ -0,0 +1,134 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundPromptVolumeParams, ProfoundPromptVolumeResponse } from './types' + +export const profoundPromptVolumeTool: ToolConfig< + ProfoundPromptVolumeParams, + ProfoundPromptVolumeResponse +> = { + id: 'profound_prompt_volume', + name: 'Profound Prompt Volume', + description: + 'Query prompt volume data to understand search demand across AI platforms in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601)', + }, + metrics: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Comma-separated metrics: volume, change', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'Comma-separated dimensions: keyword, date, platform, country_code, matching_type, frequency', + }, + dateInterval: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Date interval: hour, day, week, month, year', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"keyword","operator":"contains","value":"best"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/prompt-volumes/volume', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + start_date: params.startDate, + end_date: params.endDate, + metrics: params.metrics.split(',').map((m) => m.trim()), + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.dateInterval) { + body.date_interval = params.dateInterval + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to query prompt volume') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of rows in the report', + }, + data: { + type: 'json', + description: 'Volume data rows with metrics and dimension values', + properties: { + metrics: { + type: 'json', + description: 'Array of metric values matching requested metrics order', + }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/query-fanouts.ts b/apps/sim/tools/profound/query-fanouts.ts new file mode 100644 index 00000000000..c3b4d629bab --- /dev/null +++ b/apps/sim/tools/profound/query-fanouts.ts @@ -0,0 +1,139 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundQueryFanoutsParams, ProfoundQueryFanoutsResponse } from './types' + +export const profoundQueryFanoutsTool: ToolConfig< + ProfoundQueryFanoutsParams, + ProfoundQueryFanoutsResponse +> = { + id: 'profound_query_fanouts', + name: 'Profound Query Fanouts', + description: + 'Query fanout report showing how AI models expand prompts into sub-queries in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601)', + }, + metrics: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Comma-separated metrics: fanouts_per_execution, total_fanouts, share', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated dimensions: prompt, query, model, region, date', + }, + dateInterval: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Date interval: hour, day, week, month, year', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'JSON array of filter objects', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/reports/query-fanouts', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + category_id: params.categoryId, + start_date: params.startDate, + end_date: params.endDate, + metrics: params.metrics.split(',').map((m) => m.trim()), + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.dateInterval) { + body.date_interval = params.dateInterval + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to query fanouts report') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of rows in the report', + }, + data: { + type: 'json', + description: 'Report data rows with metrics and dimension values', + properties: { + metrics: { + type: 'json', + description: 'Array of metric values matching requested metrics order', + }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/raw-logs.ts b/apps/sim/tools/profound/raw-logs.ts new file mode 100644 index 00000000000..ad4f618b92e --- /dev/null +++ b/apps/sim/tools/profound/raw-logs.ts @@ -0,0 +1,133 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundRawLogsParams, ProfoundRawLogsResponse } from './types' + +export const profoundRawLogsTool: ToolConfig = { + id: 'profound_raw_logs', + name: 'Profound Raw Logs', + description: 'Get raw traffic logs with filters for a domain in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + domain: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Domain to query logs for (e.g. example.com)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601). Defaults to now', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'Comma-separated dimensions: timestamp, method, host, path, status_code, ip, user_agent, referer, bytes_sent, duration_ms, query_params', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"path","operator":"contains","value":"/blog"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/logs/raw', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + domain: params.domain, + start_date: params.startDate, + metrics: ['count'], + } + if (params.endDate) { + body.end_date = params.endDate + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to get raw logs') + } + if (Array.isArray(data)) { + return { + success: true, + output: { + totalRows: data.length, + data: data.map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of log entries', + }, + data: { + type: 'json', + description: 'Log data rows with metrics and dimension values', + properties: { + metrics: { type: 'json', description: 'Array of metric values (count)' }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/referrals-report.ts b/apps/sim/tools/profound/referrals-report.ts new file mode 100644 index 00000000000..3e41db2765a --- /dev/null +++ b/apps/sim/tools/profound/referrals-report.ts @@ -0,0 +1,142 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundReferralsReportParams, ProfoundReferralsReportResponse } from './types' + +export const profoundReferralsReportTool: ToolConfig< + ProfoundReferralsReportParams, + ProfoundReferralsReportResponse +> = { + id: 'profound_referrals_report', + name: 'Profound Referrals Report', + description: + 'Query human referral traffic report with hourly granularity for a domain in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + domain: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Domain to query referral traffic for (e.g. example.com)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601). Defaults to now', + }, + metrics: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Comma-separated metrics: visits, last_visit', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Comma-separated dimensions: date, hour, path, referral_source, referral_type', + }, + dateInterval: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Date interval: hour, day, week, month, year', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"referral_source","operator":"is","value":"openai"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v2/reports/referrals', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + domain: params.domain, + start_date: params.startDate, + metrics: params.metrics.split(',').map((m) => m.trim()), + } + if (params.endDate) { + body.end_date = params.endDate + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.dateInterval) { + body.date_interval = params.dateInterval + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to query referrals report') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of rows in the report', + }, + data: { + type: 'json', + description: 'Report data rows with metrics and dimension values', + properties: { + metrics: { + type: 'json', + description: 'Array of metric values matching requested metrics order', + }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/sentiment-report.ts b/apps/sim/tools/profound/sentiment-report.ts new file mode 100644 index 00000000000..9d26d137a83 --- /dev/null +++ b/apps/sim/tools/profound/sentiment-report.ts @@ -0,0 +1,140 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundSentimentReportParams, ProfoundSentimentReportResponse } from './types' + +export const profoundSentimentReportTool: ToolConfig< + ProfoundSentimentReportParams, + ProfoundSentimentReportResponse +> = { + id: 'profound_sentiment_report', + name: 'Profound Sentiment Report', + description: 'Query sentiment report for a category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601)', + }, + metrics: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Comma-separated metrics: positive, negative, occurrences', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'Comma-separated dimensions: theme, date, region, topic, model, asset_name, tag, prompt, sentiment_type, persona', + }, + dateInterval: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Date interval: hour, day, week, month, year', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"asset_name","operator":"is","value":"Company"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/reports/sentiment', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + category_id: params.categoryId, + start_date: params.startDate, + end_date: params.endDate, + metrics: params.metrics.split(',').map((m) => m.trim()), + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.dateInterval) { + body.date_interval = params.dateInterval + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to query sentiment report') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of rows in the report', + }, + data: { + type: 'json', + description: 'Report data rows with metrics and dimension values', + properties: { + metrics: { + type: 'json', + description: 'Array of metric values matching requested metrics order', + }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/profound/types.ts b/apps/sim/tools/profound/types.ts new file mode 100644 index 00000000000..3ad94fec2fb --- /dev/null +++ b/apps/sim/tools/profound/types.ts @@ -0,0 +1,422 @@ +import type { ToolResponse } from '@/tools/types' + +/** Shared report response shape (visibility, sentiment, citations, bots, referrals, query fanouts, prompt volume) */ +export interface ProfoundReportResponse extends ToolResponse { + output: { + totalRows: number + data: Array<{ + metrics: number[] + dimensions: string[] + }> + } +} + +/** Shared report query params for category-based reports */ +export interface ProfoundCategoryReportParams { + apiKey: string + categoryId: string + startDate: string + endDate: string + metrics: string + dimensions?: string + dateInterval?: string + filters?: string + limit?: number +} + +/** Shared report query params for domain-based reports */ +export interface ProfoundDomainReportParams { + apiKey: string + domain: string + startDate: string + endDate?: string + metrics: string + dimensions?: string + dateInterval?: string + filters?: string + limit?: number +} + +// --- Organization endpoints --- + +export interface ProfoundListCategoriesParams { + apiKey: string +} + +export interface ProfoundListCategoriesResponse extends ToolResponse { + output: { + categories: Array<{ + id: string + name: string + }> + } +} + +export interface ProfoundListRegionsParams { + apiKey: string +} + +export interface ProfoundListRegionsResponse extends ToolResponse { + output: { + regions: Array<{ + id: string + name: string + }> + } +} + +export interface ProfoundListModelsParams { + apiKey: string +} + +export interface ProfoundListModelsResponse extends ToolResponse { + output: { + models: Array<{ + id: string + name: string + }> + } +} + +export interface ProfoundListDomainsParams { + apiKey: string +} + +export interface ProfoundListDomainsResponse extends ToolResponse { + output: { + domains: Array<{ + id: string + name: string + createdAt: string + }> + } +} + +export interface ProfoundListAssetsParams { + apiKey: string +} + +export interface ProfoundListAssetsResponse extends ToolResponse { + output: { + assets: Array<{ + id: string + name: string + website: string + alternateDomains: string[] | null + isOwned: boolean + createdAt: string + logoUrl: string + categoryId: string + categoryName: string + }> + } +} + +export interface ProfoundListPersonasParams { + apiKey: string +} + +export interface ProfoundListPersonasResponse extends ToolResponse { + output: { + personas: Array<{ + id: string + name: string + categoryId: string + categoryName: string + persona: { + behavior: { painPoints: string | null; motivations: string | null } + employment: { + industry: string[] + jobTitle: string[] + companySize: string[] + roleSeniority: string[] + } + demographics: { ageRange: string[] } + } + }> + } +} + +// --- Category-specific endpoints --- + +export interface ProfoundCategoryTopicsParams { + apiKey: string + categoryId: string +} + +export interface ProfoundCategoryTopicsResponse extends ToolResponse { + output: { + topics: Array<{ + id: string + name: string + }> + } +} + +export interface ProfoundCategoryTagsParams { + apiKey: string + categoryId: string +} + +export interface ProfoundCategoryTagsResponse extends ToolResponse { + output: { + tags: Array<{ + id: string + name: string + }> + } +} + +export interface ProfoundCategoryPromptsParams { + apiKey: string + categoryId: string + limit?: number + cursor?: string + orderDir?: string + promptType?: string + topicId?: string + tagId?: string + regionId?: string + platformId?: string +} + +export interface ProfoundCategoryPromptsResponse extends ToolResponse { + output: { + totalRows: number + nextCursor: string | null + prompts: Array<{ + id: string + prompt: string + promptType: string + topicId: string + topicName: string + tags: Array<{ id: string; name: string }> + regions: Array<{ id: string; name: string }> + platforms: Array<{ id: string; name: string }> + createdAt: string + }> + } +} + +export interface ProfoundCategoryAssetsParams { + apiKey: string + categoryId: string +} + +export interface ProfoundCategoryAssetsResponse extends ToolResponse { + output: { + assets: Array<{ + id: string + name: string + website: string + alternateDomains: string[] | null + isOwned: boolean + createdAt: string + logoUrl: string + }> + } +} + +export interface ProfoundCategoryPersonasParams { + apiKey: string + categoryId: string +} + +export interface ProfoundCategoryPersonasResponse extends ToolResponse { + output: { + personas: Array<{ + id: string + name: string + persona: { + behavior: { painPoints: string | null; motivations: string | null } + employment: { + industry: string[] + jobTitle: string[] + companySize: string[] + roleSeniority: string[] + } + demographics: { ageRange: string[] } + } + }> + } +} + +// --- Reports --- + +export type ProfoundVisibilityReportParams = ProfoundCategoryReportParams +export type ProfoundVisibilityReportResponse = ProfoundReportResponse + +export type ProfoundSentimentReportParams = ProfoundCategoryReportParams +export type ProfoundSentimentReportResponse = ProfoundReportResponse + +export type ProfoundCitationsReportParams = ProfoundCategoryReportParams +export type ProfoundCitationsReportResponse = ProfoundReportResponse + +export type ProfoundQueryFanoutsParams = ProfoundCategoryReportParams +export type ProfoundQueryFanoutsResponse = ProfoundReportResponse + +export type ProfoundBotsReportParams = ProfoundDomainReportParams +export type ProfoundBotsReportResponse = ProfoundReportResponse + +export type ProfoundReferralsReportParams = ProfoundDomainReportParams +export type ProfoundReferralsReportResponse = ProfoundReportResponse + +// --- Prompts --- + +export interface ProfoundPromptAnswersParams { + apiKey: string + categoryId: string + startDate: string + endDate: string + filters?: string + limit?: number +} + +export interface ProfoundPromptAnswersResponse extends ToolResponse { + output: { + totalRows: number + data: Array<{ + prompt: string | null + promptType: string | null + response: string | null + mentions: string[] | null + citations: string[] | null + topic: string | null + region: string | null + model: string | null + asset: string | null + createdAt: string | null + }> + } +} + +// --- Agent Analytics --- + +export interface ProfoundRawLogsParams { + apiKey: string + domain: string + startDate: string + endDate?: string + dimensions?: string + filters?: string + limit?: number +} + +export interface ProfoundRawLogsResponse extends ToolResponse { + output: { + totalRows: number + data: Array<{ + metrics: number[] + dimensions: string[] + }> + } +} + +export interface ProfoundBotLogsParams { + apiKey: string + domain: string + startDate: string + endDate?: string + dimensions?: string + filters?: string + limit?: number +} + +export interface ProfoundBotLogsResponse extends ToolResponse { + output: { + totalRows: number + data: Array<{ + metrics: number[] + dimensions: string[] + }> + } +} + +// --- Content --- + +export interface ProfoundListOptimizationsParams { + apiKey: string + assetId: string + limit?: number + offset?: number +} + +export interface ProfoundListOptimizationsResponse extends ToolResponse { + output: { + totalRows: number + optimizations: Array<{ + id: string + title: string + createdAt: string + extractedInput: string | null + type: string + status: string + }> + } +} + +export interface ProfoundOptimizationAnalysisParams { + apiKey: string + assetId: string + contentId: string +} + +export interface ProfoundOptimizationAnalysisResponse extends ToolResponse { + output: { + content: { + format: string + value: string + } + aeoContentScore: { + value: number + targetZone: { low: number; high: number } + } | null + analysis: { + breakdown: Array<{ + title: string + weight: number + score: number + }> + } + recommendations: Array<{ + title: string + status: string + impact: { section: string; score: number } | null + suggestion: { text: string; rationale: string } + }> + } +} + +// --- Prompt Volumes --- + +export interface ProfoundPromptVolumeParams { + apiKey: string + startDate: string + endDate: string + metrics: string + dimensions?: string + dateInterval?: string + filters?: string + limit?: number +} + +export interface ProfoundPromptVolumeResponse extends ToolResponse { + output: { + totalRows: number + data: Array<{ + metrics: number[] + dimensions: string[] + }> + } +} + +export interface ProfoundCitationPromptsParams { + apiKey: string + inputDomain: string +} + +export interface ProfoundCitationPromptsResponse extends ToolResponse { + output: { + data: unknown + } +} diff --git a/apps/sim/tools/profound/visibility-report.ts b/apps/sim/tools/profound/visibility-report.ts new file mode 100644 index 00000000000..9c3a3565f69 --- /dev/null +++ b/apps/sim/tools/profound/visibility-report.ts @@ -0,0 +1,141 @@ +import type { ToolConfig } from '@/tools/types' +import type { ProfoundVisibilityReportParams, ProfoundVisibilityReportResponse } from './types' + +export const profoundVisibilityReportTool: ToolConfig< + ProfoundVisibilityReportParams, + ProfoundVisibilityReportResponse +> = { + id: 'profound_visibility_report', + name: 'Profound Visibility Report', + description: 'Query AI visibility report for a category in Profound', + version: '1.0.0', + + params: { + apiKey: { + type: 'string', + required: true, + visibility: 'user-only', + description: 'Profound API Key', + }, + categoryId: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Category ID (UUID)', + }, + startDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'Start date (YYYY-MM-DD or ISO 8601)', + }, + endDate: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: 'End date (YYYY-MM-DD or ISO 8601)', + }, + metrics: { + type: 'string', + required: true, + visibility: 'user-or-llm', + description: + 'Comma-separated metrics: share_of_voice, mentions_count, visibility_score, executions, average_position', + }, + dimensions: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'Comma-separated dimensions: date, region, topic, model, asset_name, prompt, tag, persona', + }, + dateInterval: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: 'Date interval: hour, day, week, month, year', + }, + filters: { + type: 'string', + required: false, + visibility: 'user-or-llm', + description: + 'JSON array of filter objects, e.g. [{"field":"asset_name","operator":"is","value":"Company"}]', + }, + limit: { + type: 'number', + required: false, + visibility: 'user-or-llm', + description: 'Maximum number of results (default 10000, max 50000)', + }, + }, + + request: { + url: 'https://api.tryprofound.com/v1/reports/visibility', + method: 'POST', + headers: (params) => ({ + 'X-API-Key': params.apiKey, + 'Content-Type': 'application/json', + Accept: 'application/json', + }), + body: (params) => { + const body: Record = { + category_id: params.categoryId, + start_date: params.startDate, + end_date: params.endDate, + metrics: params.metrics.split(',').map((m) => m.trim()), + } + if (params.dimensions) { + body.dimensions = params.dimensions.split(',').map((d) => d.trim()) + } + if (params.dateInterval) { + body.date_interval = params.dateInterval + } + if (params.filters) { + body.filters = JSON.parse(params.filters) + } + if (params.limit) { + body.pagination = { limit: params.limit } + } + return body + }, + }, + + transformResponse: async (response) => { + const data = await response.json() + if (!response.ok) { + throw new Error(data.detail?.[0]?.msg || 'Failed to query visibility report') + } + return { + success: true, + output: { + totalRows: data.info?.total_rows ?? 0, + data: (data.data ?? []).map((row: { metrics: number[]; dimensions: string[] }) => ({ + metrics: row.metrics ?? [], + dimensions: row.dimensions ?? [], + })), + }, + } + }, + + outputs: { + totalRows: { + type: 'number', + description: 'Total number of rows in the report', + }, + data: { + type: 'json', + description: 'Report data rows with metrics and dimension values', + properties: { + metrics: { + type: 'json', + description: 'Array of metric values matching requested metrics order', + }, + dimensions: { + type: 'json', + description: 'Array of dimension values matching requested dimensions order', + }, + }, + }, + }, +} diff --git a/apps/sim/tools/registry.ts b/apps/sim/tools/registry.ts index 66d70a07f7b..5e1219d006c 100644 --- a/apps/sim/tools/registry.ts +++ b/apps/sim/tools/registry.ts @@ -1771,6 +1771,32 @@ import { posthogUpdatePropertyDefinitionTool, posthogUpdateSurveyTool, } from '@/tools/posthog' +import { + profoundBotLogsTool, + profoundBotsReportTool, + profoundCategoryAssetsTool, + profoundCategoryPersonasTool, + profoundCategoryPromptsTool, + profoundCategoryTagsTool, + profoundCategoryTopicsTool, + profoundCitationPromptsTool, + profoundCitationsReportTool, + profoundListAssetsTool, + profoundListCategoriesTool, + profoundListDomainsTool, + profoundListModelsTool, + profoundListOptimizationsTool, + profoundListPersonasTool, + profoundListRegionsTool, + profoundOptimizationAnalysisTool, + profoundPromptAnswersTool, + profoundPromptVolumeTool, + profoundQueryFanoutsTool, + profoundRawLogsTool, + profoundReferralsReportTool, + profoundSentimentReportTool, + profoundVisibilityReportTool, +} from '@/tools/profound' import { pulseParserTool, pulseParserV2Tool } from '@/tools/pulse' import { qdrantFetchTool, qdrantSearchTool, qdrantUpsertTool } from '@/tools/qdrant' import { quiverImageToSvgTool, quiverListModelsTool, quiverTextToSvgTool } from '@/tools/quiver' @@ -3623,6 +3649,30 @@ export const tools: Record = { google_slides_insert_text: googleSlidesInsertTextTool, perplexity_chat: perplexityChatTool, perplexity_search: perplexitySearchTool, + profound_bot_logs: profoundBotLogsTool, + profound_bots_report: profoundBotsReportTool, + profound_category_assets: profoundCategoryAssetsTool, + profound_category_personas: profoundCategoryPersonasTool, + profound_category_prompts: profoundCategoryPromptsTool, + profound_category_tags: profoundCategoryTagsTool, + profound_category_topics: profoundCategoryTopicsTool, + profound_citation_prompts: profoundCitationPromptsTool, + profound_citations_report: profoundCitationsReportTool, + profound_list_assets: profoundListAssetsTool, + profound_list_categories: profoundListCategoriesTool, + profound_list_domains: profoundListDomainsTool, + profound_list_models: profoundListModelsTool, + profound_list_optimizations: profoundListOptimizationsTool, + profound_list_personas: profoundListPersonasTool, + profound_list_regions: profoundListRegionsTool, + profound_optimization_analysis: profoundOptimizationAnalysisTool, + profound_prompt_answers: profoundPromptAnswersTool, + profound_prompt_volume: profoundPromptVolumeTool, + profound_query_fanouts: profoundQueryFanoutsTool, + profound_raw_logs: profoundRawLogsTool, + profound_referrals_report: profoundReferralsReportTool, + profound_sentiment_report: profoundSentimentReportTool, + profound_visibility_report: profoundVisibilityReportTool, pulse_parser: pulseParserTool, pulse_parser_v2: pulseParserV2Tool, quiver_image_to_svg: quiverImageToSvgTool, From 357f44cac8efec464abecbe67f1fcd8fd1c32371 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:38:19 -0700 Subject: [PATCH 02/16] fix(profound): fix import ordering and JSON formatting for CI lint --- .../integrations/data/icon-mapping.ts | 14 +- .../integrations/data/integrations.json | 923 ++++-------------- 2 files changed, 181 insertions(+), 756 deletions(-) diff --git a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts index 65f4889de79..841cda375b3 100644 --- a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts +++ b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts @@ -33,8 +33,8 @@ import { DatadogIcon, DevinIcon, DiscordIcon, - DocuSignIcon, DocumentIcon, + DocuSignIcon, DropboxIcon, DsPyIcon, DubIcon, @@ -50,8 +50,8 @@ import { FirecrawlIcon, FirefliesIcon, GammaIcon, - GitLabIcon, GithubIcon, + GitLabIcon, GmailIcon, GongIcon, GoogleAdsIcon, @@ -97,9 +97,9 @@ import { LinkupIcon, LoopsIcon, LumaIcon, - MailServerIcon, MailchimpIcon, MailgunIcon, + MailServerIcon, Mem0Icon, MicrosoftDataverseIcon, MicrosoftExcelIcon, @@ -138,8 +138,6 @@ import { RevenueCatIcon, RipplingIcon, S3Icon, - SQSIcon, - STTIcon, SalesforceIcon, SearchIcon, SendgridIcon, @@ -151,17 +149,19 @@ import { SimilarwebIcon, SlackIcon, SmtpIcon, + SQSIcon, SshIcon, + STTIcon, StagehandIcon, StripeIcon, SupabaseIcon, - TTSIcon, TavilyIcon, TelegramIcon, TextractIcon, TinybirdIcon, TranslateIcon, TrelloIcon, + TTSIcon, TwilioIcon, TypeformIcon, UpstashIcon, @@ -173,11 +173,11 @@ import { WikipediaIcon, WordpressIcon, WorkdayIcon, + xIcon, YouTubeIcon, ZendeskIcon, ZepIcon, ZoomIcon, - xIcon, } from '@/components/icons' type IconComponent = ComponentType> diff --git a/apps/sim/app/(landing)/integrations/data/integrations.json b/apps/sim/app/(landing)/integrations/data/integrations.json index dcb971067cd..2816d7c4ee0 100644 --- a/apps/sim/app/(landing)/integrations/data/integrations.json +++ b/apps/sim/app/(landing)/integrations/data/integrations.json @@ -52,10 +52,7 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": [ - "secrets-management", - "identity" - ] + "tags": ["secrets-management", "identity"] }, { "type": "a2a", @@ -106,10 +103,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "agentic", - "automation" - ] + "tags": ["agentic", "automation"] }, { "type": "ahrefs", @@ -160,11 +154,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "seo", - "marketing", - "data-analytics" - ] + "tags": ["seo", "marketing", "data-analytics"] }, { "type": "airtable", @@ -221,10 +211,7 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": [ - "spreadsheet", - "automation" - ] + "tags": ["spreadsheet", "automation"] }, { "type": "airweave", @@ -242,10 +229,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "algolia", @@ -324,10 +308,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "dynamodb", @@ -374,10 +355,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "rds", @@ -420,10 +398,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "sqs", @@ -446,11 +421,7 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "messaging", - "automation" - ] + "tags": ["cloud", "messaging", "automation"] }, { "type": "amplitude", @@ -513,10 +484,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-analytics", - "marketing" - ] + "tags": ["data-analytics", "marketing"] }, { "type": "apify", @@ -543,11 +511,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation", - "data-analytics" - ] + "tags": ["web-scraping", "automation", "data-analytics"] }, { "type": "apollo", @@ -666,10 +630,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "sales-engagement" - ] + "tags": ["enrichment", "sales-engagement"] }, { "type": "arxiv", @@ -700,10 +661,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "document-processing", - "knowledge-base" - ] + "tags": ["document-processing", "knowledge-base"] }, { "type": "asana", @@ -746,11 +704,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing", - "automation" - ] + "tags": ["project-management", "ticketing", "automation"] }, { "type": "ashby", @@ -912,9 +866,7 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring" - ] + "tags": ["hiring"] }, { "type": "attio", @@ -1184,10 +1136,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "enrichment" - ] + "tags": ["sales-engagement", "enrichment"] }, { "type": "textract_v2", @@ -1205,11 +1154,7 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr", - "cloud" - ] + "tags": ["document-processing", "ocr", "cloud"] }, { "type": "microsoft_ad", @@ -1280,10 +1225,7 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": [ - "identity", - "microsoft-365" - ] + "tags": ["identity", "microsoft-365"] }, { "type": "box", @@ -1362,11 +1304,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "content-management", - "e-signatures" - ] + "tags": ["cloud", "content-management", "e-signatures"] }, { "type": "brandfetch", @@ -1393,10 +1331,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "marketing" - ] + "tags": ["enrichment", "marketing"] }, { "type": "browser_use", @@ -1414,11 +1349,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation", - "agentic" - ] + "tags": ["web-scraping", "automation", "agentic"] }, { "type": "calcom", @@ -1559,11 +1490,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "scheduling", - "calendar", - "meeting" - ] + "tags": ["scheduling", "calendar", "meeting"] }, { "type": "calendly", @@ -1631,11 +1558,7 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": [ - "scheduling", - "calendar", - "meeting" - ] + "tags": ["scheduling", "calendar", "meeting"] }, { "type": "circleback", @@ -1669,11 +1592,7 @@ "authType": "none", "category": "triggers", "integrationType": "ai", - "tags": [ - "meeting", - "note-taking", - "automation" - ] + "tags": ["meeting", "note-taking", "automation"] }, { "type": "clay", @@ -1691,11 +1610,7 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "sales-engagement", - "data-analytics" - ] + "tags": ["enrichment", "sales-engagement", "data-analytics"] }, { "type": "clerk", @@ -1758,10 +1673,7 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": [ - "identity", - "automation" - ] + "tags": ["identity", "automation"] }, { "type": "cloudflare", @@ -1832,10 +1744,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "monitoring" - ] + "tags": ["cloud", "monitoring"] }, { "type": "confluence_v2", @@ -2119,11 +2028,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "knowledge-base", - "content-management", - "note-taking" - ] + "tags": ["knowledge-base", "content-management", "note-taking"] }, { "type": "cursor_v2", @@ -2170,10 +2075,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "agentic", - "automation" - ] + "tags": ["agentic", "automation"] }, { "type": "databricks", @@ -2224,11 +2126,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics", - "cloud" - ] + "tags": ["data-warehouse", "data-analytics", "cloud"] }, { "type": "datadog", @@ -2295,11 +2193,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "monitoring", - "incident-management", - "error-tracking" - ] + "tags": ["monitoring", "incident-management", "error-tracking"] }, { "type": "devin", @@ -2334,10 +2228,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "agentic", - "automation" - ] + "tags": ["agentic", "automation"] }, { "type": "discord", @@ -2496,11 +2387,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "webhooks", - "automation" - ] + "tags": ["messaging", "webhooks", "automation"] }, { "type": "docusign", @@ -2551,10 +2438,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "e-signatures", - "document-processing" - ] + "tags": ["e-signatures", "document-processing"] }, { "type": "dropbox", @@ -2613,10 +2497,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "document-processing" - ] + "tags": ["cloud", "document-processing"] }, { "type": "dspy", @@ -2647,11 +2528,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "agentic", - "automation" - ] + "tags": ["llm", "agentic", "automation"] }, { "type": "dub", @@ -2698,11 +2575,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "link-management", - "marketing", - "data-analytics" - ] + "tags": ["link-management", "marketing", "data-analytics"] }, { "type": "duckduckgo", @@ -2720,10 +2593,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "seo" - ] + "tags": ["web-scraping", "seo"] }, { "type": "elasticsearch", @@ -2794,10 +2664,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "vector-search", - "data-analytics" - ] + "tags": ["vector-search", "data-analytics"] }, { "type": "elevenlabs", @@ -2815,9 +2682,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "text-to-speech" - ] + "tags": ["text-to-speech"] }, { "type": "openai", @@ -2835,10 +2700,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "vector-search" - ] + "tags": ["llm", "vector-search"] }, { "type": "enrich", @@ -2973,10 +2835,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "data-analytics" - ] + "tags": ["enrichment", "data-analytics"] }, { "type": "evernote", @@ -3039,10 +2898,7 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": [ - "note-taking", - "knowledge-base" - ] + "tags": ["note-taking", "knowledge-base"] }, { "type": "exa", @@ -3081,10 +2937,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "enrichment" - ] + "tags": ["web-scraping", "enrichment"] }, { "type": "fathom", @@ -3134,10 +2987,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "meeting", - "note-taking" - ] + "tags": ["meeting", "note-taking"] }, { "type": "file_v3", @@ -3155,9 +3005,7 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": [ - "document-processing" - ] + "tags": ["document-processing"] }, { "type": "firecrawl", @@ -3200,10 +3048,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation" - ] + "tags": ["web-scraping", "automation"] }, { "type": "fireflies_v2", @@ -3268,11 +3113,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "meeting", - "speech-to-text", - "note-taking" - ] + "tags": ["meeting", "speech-to-text", "note-taking"] }, { "type": "gamma", @@ -3311,10 +3152,7 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": [ - "document-processing", - "content-management" - ] + "tags": ["document-processing", "content-management"] }, { "type": "github_v2", @@ -3721,10 +3559,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "version-control", - "ci-cd" - ] + "tags": ["version-control", "ci-cd"] }, { "type": "gitlab", @@ -3819,10 +3654,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "version-control", - "ci-cd" - ] + "tags": ["version-control", "ci-cd"] }, { "type": "gmail_v2", @@ -3889,10 +3721,7 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": [ - "google-workspace", - "messaging" - ] + "tags": ["google-workspace", "messaging"] }, { "type": "gong", @@ -3983,11 +3812,7 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "meeting", - "sales-engagement", - "speech-to-text" - ] + "tags": ["meeting", "sales-engagement", "speech-to-text"] }, { "type": "google_ads", @@ -4030,11 +3855,7 @@ "authType": "oauth", "category": "tools", "integrationType": "analytics", - "tags": [ - "marketing", - "google-workspace", - "data-analytics" - ] + "tags": ["marketing", "google-workspace", "data-analytics"] }, { "type": "google_bigquery", @@ -4073,11 +3894,7 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "google-workspace", - "data-analytics" - ] + "tags": ["data-warehouse", "google-workspace", "data-analytics"] }, { "type": "google_books", @@ -4104,11 +3921,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "google-workspace", - "knowledge-base", - "content-management" - ] + "tags": ["google-workspace", "knowledge-base", "content-management"] }, { "type": "google_calendar_v2", @@ -4167,11 +3980,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "calendar", - "scheduling", - "google-workspace" - ] + "tags": ["calendar", "scheduling", "google-workspace"] }, { "type": "google_contacts", @@ -4214,11 +4023,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "google-workspace", - "customer-support", - "enrichment" - ] + "tags": ["google-workspace", "customer-support", "enrichment"] }, { "type": "google_docs", @@ -4249,11 +4054,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "google-workspace", - "document-processing", - "content-management" - ] + "tags": ["google-workspace", "document-processing", "content-management"] }, { "type": "google_drive", @@ -4328,11 +4129,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "google-workspace", - "document-processing" - ] + "tags": ["cloud", "google-workspace", "document-processing"] }, { "type": "google_forms", @@ -4393,11 +4190,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "google-workspace", - "forms", - "data-analytics" - ] + "tags": ["google-workspace", "forms", "data-analytics"] }, { "type": "google_groups", @@ -4480,11 +4273,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "google-workspace", - "messaging", - "identity" - ] + "tags": ["google-workspace", "messaging", "identity"] }, { "type": "google_maps", @@ -4555,10 +4344,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "google-workspace", - "enrichment" - ] + "tags": ["google-workspace", "enrichment"] }, { "type": "google_meet", @@ -4601,11 +4387,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "meeting", - "google-workspace", - "scheduling" - ] + "tags": ["meeting", "google-workspace", "scheduling"] }, { "type": "google_pagespeed", @@ -4623,11 +4405,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "google-workspace", - "seo", - "monitoring" - ] + "tags": ["google-workspace", "seo", "monitoring"] }, { "type": "google_search", @@ -4645,11 +4423,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "google-workspace", - "web-scraping", - "seo" - ] + "tags": ["google-workspace", "web-scraping", "seo"] }, { "type": "google_sheets_v2", @@ -4712,11 +4486,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "spreadsheet", - "google-workspace", - "data-analytics" - ] + "tags": ["spreadsheet", "google-workspace", "data-analytics"] }, { "type": "google_slides_v2", @@ -4791,11 +4561,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "google-workspace", - "document-processing", - "content-management" - ] + "tags": ["google-workspace", "document-processing", "content-management"] }, { "type": "google_tasks", @@ -4838,11 +4604,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "google-workspace", - "project-management", - "scheduling" - ] + "tags": ["google-workspace", "project-management", "scheduling"] }, { "type": "google_translate", @@ -4869,11 +4631,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "google-workspace", - "content-management", - "automation" - ] + "tags": ["google-workspace", "content-management", "automation"] }, { "type": "google_vault", @@ -4920,11 +4678,7 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": [ - "google-workspace", - "secrets-management", - "document-processing" - ] + "tags": ["google-workspace", "secrets-management", "document-processing"] }, { "type": "grafana", @@ -5019,10 +4773,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "monitoring", - "data-analytics" - ] + "tags": ["monitoring", "data-analytics"] }, { "type": "grain", @@ -5118,10 +4869,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "meeting", - "note-taking" - ] + "tags": ["meeting", "note-taking"] }, { "type": "granola", @@ -5148,10 +4896,7 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": [ - "meeting", - "note-taking" - ] + "tags": ["meeting", "note-taking"] }, { "type": "greenhouse", @@ -5214,9 +4959,7 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring" - ] + "tags": ["hiring"] }, { "type": "greptile", @@ -5251,10 +4994,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "version-control", - "knowledge-base" - ] + "tags": ["version-control", "knowledge-base"] }, { "type": "hex", @@ -5337,10 +5077,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "hubspot", @@ -5566,11 +5303,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "marketing", - "sales-engagement", - "customer-support" - ] + "tags": ["marketing", "sales-engagement", "customer-support"] }, { "type": "huggingface", @@ -5588,10 +5321,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "agentic" - ] + "tags": ["llm", "agentic"] }, { "type": "hunter", @@ -5634,10 +5364,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "sales-engagement" - ] + "tags": ["enrichment", "sales-engagement"] }, { "type": "image_generator", @@ -5655,10 +5382,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "image-generation", - "llm" - ] + "tags": ["image-generation", "llm"] }, { "type": "imap", @@ -5682,10 +5406,7 @@ "authType": "none", "category": "triggers", "integrationType": "email", - "tags": [ - "messaging", - "automation" - ] + "tags": ["messaging", "automation"] }, { "type": "incidentio", @@ -5880,10 +5601,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "incident-management", - "monitoring" - ] + "tags": ["incident-management", "monitoring"] }, { "type": "infisical", @@ -5922,9 +5640,7 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": [ - "secrets-management" - ] + "tags": ["secrets-management"] }, { "type": "intercom_v2", @@ -6067,10 +5783,7 @@ "authType": "api-key", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "messaging" - ] + "tags": ["customer-support", "messaging"] }, { "type": "jina", @@ -6097,10 +5810,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "knowledge-base" - ] + "tags": ["web-scraping", "knowledge-base"] }, { "type": "jira", @@ -6246,10 +5956,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing" - ] + "tags": ["project-management", "ticketing"] }, { "type": "jira_service_management", @@ -6352,11 +6059,7 @@ "authType": "oauth", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "ticketing", - "incident-management" - ] + "tags": ["customer-support", "ticketing", "incident-management"] }, { "type": "kalshi_v2", @@ -6443,10 +6146,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "prediction-markets", - "data-analytics" - ] + "tags": ["prediction-markets", "data-analytics"] }, { "type": "ketch", @@ -6485,9 +6185,7 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": [ - "identity" - ] + "tags": ["identity"] }, { "type": "knowledge", @@ -6587,11 +6285,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "monitoring", - "llm", - "data-analytics" - ] + "tags": ["monitoring", "llm", "data-analytics"] }, { "type": "lemlist", @@ -6668,11 +6362,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "sales-engagement", - "email-marketing", - "automation" - ] + "tags": ["sales-engagement", "email-marketing", "automation"] }, { "type": "linear", @@ -7079,10 +6769,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing" - ] + "tags": ["project-management", "ticketing"] }, { "type": "linkedin", @@ -7109,11 +6796,7 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": [ - "marketing", - "sales-engagement", - "enrichment" - ] + "tags": ["marketing", "sales-engagement", "enrichment"] }, { "type": "linkup", @@ -7131,10 +6814,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "enrichment" - ] + "tags": ["web-scraping", "enrichment"] }, { "type": "loops", @@ -7193,11 +6873,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "marketing", - "automation" - ] + "tags": ["email-marketing", "marketing", "automation"] }, { "type": "luma", @@ -7240,11 +6916,7 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": [ - "events", - "calendar", - "scheduling" - ] + "tags": ["events", "calendar", "scheduling"] }, { "type": "mailchimp", @@ -7555,11 +7227,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "marketing", - "automation" - ] + "tags": ["email-marketing", "marketing", "automation"] }, { "type": "mailgun", @@ -7610,10 +7278,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "messaging", - "email-marketing" - ] + "tags": ["messaging", "email-marketing"] }, { "type": "mem0", @@ -7644,11 +7309,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "knowledge-base", - "agentic" - ] + "tags": ["llm", "knowledge-base", "agentic"] }, { "type": "memory", @@ -7768,11 +7429,7 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": [ - "microsoft-365", - "data-warehouse", - "cloud" - ] + "tags": ["microsoft-365", "data-warehouse", "cloud"] }, { "type": "microsoft_excel_v2", @@ -7799,10 +7456,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "spreadsheet", - "microsoft-365" - ] + "tags": ["spreadsheet", "microsoft-365"] }, { "type": "microsoft_planner", @@ -7873,11 +7527,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "microsoft-365", - "ticketing" - ] + "tags": ["project-management", "microsoft-365", "ticketing"] }, { "type": "microsoft_teams", @@ -7958,10 +7608,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "microsoft-365" - ] + "tags": ["messaging", "microsoft-365"] }, { "type": "mistral_parse_v3", @@ -7979,10 +7626,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr" - ] + "tags": ["document-processing", "ocr"] }, { "type": "mongodb", @@ -8025,10 +7669,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "cloud" - ] + "tags": ["data-warehouse", "cloud"] }, { "type": "mysql", @@ -8071,10 +7712,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "neo4j", @@ -8121,10 +7759,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "notion_v2", @@ -8142,11 +7777,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "note-taking", - "knowledge-base", - "content-management" - ] + "tags": ["note-taking", "knowledge-base", "content-management"] }, { "type": "obsidian", @@ -8225,10 +7856,7 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": [ - "note-taking", - "knowledge-base" - ] + "tags": ["note-taking", "knowledge-base"] }, { "type": "okta", @@ -8319,10 +7947,7 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": [ - "identity", - "automation" - ] + "tags": ["identity", "automation"] }, { "type": "onedrive", @@ -8365,11 +7990,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "microsoft-365", - "cloud", - "document-processing" - ] + "tags": ["microsoft-365", "cloud", "document-processing"] }, { "type": "outlook", @@ -8424,11 +8045,7 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": [ - "microsoft-365", - "messaging", - "automation" - ] + "tags": ["microsoft-365", "messaging", "automation"] }, { "type": "pagerduty", @@ -8471,10 +8088,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "incident-management", - "monitoring" - ] + "tags": ["incident-management", "monitoring"] }, { "type": "parallel_ai", @@ -8505,11 +8119,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "llm", - "agentic" - ] + "tags": ["web-scraping", "llm", "agentic"] }, { "type": "perplexity", @@ -8536,11 +8146,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "web-scraping", - "agentic" - ] + "tags": ["llm", "web-scraping", "agentic"] }, { "type": "pinecone", @@ -8579,10 +8185,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "pipedrive", @@ -8673,10 +8276,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "project-management" - ] + "tags": ["sales-engagement", "project-management"] }, { "type": "polymarket", @@ -8775,10 +8375,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "prediction-markets", - "data-analytics" - ] + "tags": ["prediction-markets", "data-analytics"] }, { "type": "postgresql", @@ -8821,10 +8418,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "posthog", @@ -9015,10 +8609,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-analytics", - "monitoring" - ] + "tags": ["data-analytics", "monitoring"] }, { "type": "profound", @@ -9133,10 +8724,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "seo", - "data-analytics" - ] + "tags": ["seo", "data-analytics"] }, { "type": "pulse_v2", @@ -9154,10 +8742,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr" - ] + "tags": ["document-processing", "ocr"] }, { "type": "qdrant", @@ -9188,10 +8773,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "quiver", @@ -9222,9 +8804,7 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": [ - "image-generation" - ] + "tags": ["image-generation"] }, { "type": "reddit", @@ -9311,10 +8891,7 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": [ - "content-management", - "web-scraping" - ] + "tags": ["content-management", "web-scraping"] }, { "type": "redis", @@ -9421,10 +8998,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "reducto_v2", @@ -9442,10 +9016,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr" - ] + "tags": ["document-processing", "ocr"] }, { "type": "resend", @@ -9496,10 +9067,7 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "messaging" - ] + "tags": ["email-marketing", "messaging"] }, { "type": "revenuecat", @@ -9558,10 +9126,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": [ - "payments", - "subscriptions" - ] + "tags": ["payments", "subscriptions"] }, { "type": "rippling", @@ -9656,9 +9221,7 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring" - ] + "tags": ["hiring"] }, { "type": "s3", @@ -9697,10 +9260,7 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "salesforce", @@ -9859,10 +9419,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "customer-support" - ] + "tags": ["sales-engagement", "customer-support"] }, { "type": "search", @@ -9880,10 +9437,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "seo" - ] + "tags": ["web-scraping", "seo"] }, { "type": "sendgrid", @@ -9966,10 +9520,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "messaging" - ] + "tags": ["email-marketing", "messaging"] }, { "type": "sentry", @@ -10036,10 +9587,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "error-tracking", - "monitoring" - ] + "tags": ["error-tracking", "monitoring"] }, { "type": "serper", @@ -10057,10 +9605,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "seo" - ] + "tags": ["web-scraping", "seo"] }, { "type": "servicenow", @@ -10095,11 +9640,7 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "ticketing", - "incident-management" - ] + "tags": ["customer-support", "ticketing", "incident-management"] }, { "type": "sftp", @@ -10142,10 +9683,7 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "automation" - ] + "tags": ["cloud", "automation"] }, { "type": "sharepoint", @@ -10196,11 +9734,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "microsoft-365", - "content-management", - "document-processing" - ] + "tags": ["microsoft-365", "content-management", "document-processing"] }, { "type": "shopify", @@ -10303,10 +9837,7 @@ "authType": "oauth", "category": "tools", "integrationType": "ecommerce", - "tags": [ - "payments", - "subscriptions" - ] + "tags": ["payments", "subscriptions"] }, { "type": "similarweb", @@ -10345,11 +9876,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "marketing", - "data-analytics", - "seo" - ] + "tags": ["marketing", "data-analytics", "seo"] }, { "type": "slack", @@ -10474,11 +10001,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "webhooks", - "automation" - ] + "tags": ["messaging", "webhooks", "automation"] }, { "type": "smtp", @@ -10496,10 +10019,7 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "messaging" - ] + "tags": ["email-marketing", "messaging"] }, { "type": "stt_v2", @@ -10517,10 +10037,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "speech-to-text", - "document-processing" - ] + "tags": ["speech-to-text", "document-processing"] }, { "type": "ssh", @@ -10591,10 +10108,7 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "automation" - ] + "tags": ["cloud", "automation"] }, { "type": "stagehand", @@ -10621,11 +10135,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation", - "agentic" - ] + "tags": ["web-scraping", "automation", "agentic"] }, { "type": "stripe", @@ -10850,11 +10360,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": [ - "payments", - "subscriptions", - "webhooks" - ] + "tags": ["payments", "subscriptions", "webhooks"] }, { "type": "supabase", @@ -10961,11 +10467,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse", - "vector-search" - ] + "tags": ["cloud", "data-warehouse", "vector-search"] }, { "type": "tavily", @@ -11000,10 +10502,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "enrichment" - ] + "tags": ["web-scraping", "enrichment"] }, { "type": "telegram", @@ -11056,11 +10555,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "webhooks", - "automation" - ] + "tags": ["messaging", "webhooks", "automation"] }, { "type": "tts", @@ -11078,10 +10573,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "text-to-speech", - "llm" - ] + "tags": ["text-to-speech", "llm"] }, { "type": "tinybird", @@ -11108,10 +10600,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "translate", @@ -11129,10 +10618,7 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "llm" - ] + "tags": ["document-processing", "llm"] }, { "type": "trello", @@ -11175,10 +10661,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing" - ] + "tags": ["project-management", "ticketing"] }, { "type": "twilio_sms", @@ -11196,10 +10679,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "automation" - ] + "tags": ["messaging", "automation"] }, { "type": "twilio_voice", @@ -11236,10 +10716,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "text-to-speech" - ] + "tags": ["messaging", "text-to-speech"] }, { "type": "typeform", @@ -11296,10 +10773,7 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": [ - "forms", - "data-analytics" - ] + "tags": ["forms", "data-analytics"] }, { "type": "upstash", @@ -11382,10 +10856,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "vercel", @@ -11604,10 +11075,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "ci-cd" - ] + "tags": ["cloud", "ci-cd"] }, { "type": "video_generator_v2", @@ -11625,10 +11093,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "video-generation", - "llm" - ] + "tags": ["video-generation", "llm"] }, { "type": "vision_v2", @@ -11646,11 +11111,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "document-processing", - "ocr" - ] + "tags": ["llm", "document-processing", "ocr"] }, { "type": "wealthbox", @@ -11693,10 +11154,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "customer-support" - ] + "tags": ["sales-engagement", "customer-support"] }, { "type": "webflow", @@ -11756,10 +11214,7 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": [ - "content-management", - "seo" - ] + "tags": ["content-management", "seo"] }, { "type": "whatsapp", @@ -11783,10 +11238,7 @@ "authType": "api-key", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "automation" - ] + "tags": ["messaging", "automation"] }, { "type": "wikipedia", @@ -11821,10 +11273,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "knowledge-base", - "web-scraping" - ] + "tags": ["knowledge-base", "web-scraping"] }, { "type": "wordpress", @@ -11947,10 +11396,7 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": [ - "content-management", - "seo" - ] + "tags": ["content-management", "seo"] }, { "type": "workday", @@ -12009,10 +11455,7 @@ "authType": "none", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring", - "project-management" - ] + "tags": ["hiring", "project-management"] }, { "type": "x", @@ -12143,10 +11586,7 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": [ - "marketing", - "messaging" - ] + "tags": ["marketing", "messaging"] }, { "type": "youtube", @@ -12201,11 +11641,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "google-workspace", - "marketing", - "content-management" - ] + "tags": ["google-workspace", "marketing", "content-management"] }, { "type": "zendesk", @@ -12328,10 +11764,7 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "ticketing" - ] + "tags": ["customer-support", "ticketing"] }, { "type": "zep", @@ -12386,11 +11819,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "knowledge-base", - "agentic" - ] + "tags": ["llm", "knowledge-base", "agentic"] }, { "type": "zoom", @@ -12449,10 +11878,6 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "meeting", - "calendar", - "scheduling" - ] + "tags": ["meeting", "calendar", "scheduling"] } -] \ No newline at end of file +] From 4bb1836d1ee980f631f69b341cee0bb3b5bc6b6f Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:39:45 -0700 Subject: [PATCH 03/16] fix(profound): gate metrics mapping on current operation to prevent stale overrides --- apps/sim/blocks/blocks/profound.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/apps/sim/blocks/blocks/profound.ts b/apps/sim/blocks/blocks/profound.ts index 932c96dd6ef..8910fd197dd 100644 --- a/apps/sim/blocks/blocks/profound.ts +++ b/apps/sim/blocks/blocks/profound.ts @@ -359,13 +359,19 @@ export const ProfoundBlock: BlockConfig = { tool: (params) => `profound_${params.operation}`, params: (params) => { const result: Record = {} - if (params.visibilityMetrics) result.metrics = params.visibilityMetrics - if (params.sentimentMetrics) result.metrics = params.sentimentMetrics - if (params.citationsMetrics) result.metrics = params.citationsMetrics - if (params.botsMetrics) result.metrics = params.botsMetrics - if (params.referralsMetrics) result.metrics = params.referralsMetrics - if (params.fanoutsMetrics) result.metrics = params.fanoutsMetrics - if (params.volumeMetrics) result.metrics = params.volumeMetrics + const metricsMap: Record = { + visibility_report: 'visibilityMetrics', + sentiment_report: 'sentimentMetrics', + citations_report: 'citationsMetrics', + bots_report: 'botsMetrics', + referrals_report: 'referralsMetrics', + query_fanouts: 'fanoutsMetrics', + prompt_volume: 'volumeMetrics', + } + const metricsField = metricsMap[params.operation as string] + if (metricsField && params[metricsField]) { + result.metrics = params[metricsField] + } if (params.limit) result.limit = Number(params.limit) if (params.offset) result.offset = Number(params.offset) return result From 226987b7727249be076368a23131f26ad10f6db9 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:42:23 -0700 Subject: [PATCH 04/16] fix(profound): guard JSON.parse on filters, fix offset=0 falsy check, remove duplicate prompt_answers in FILTER_OPS --- apps/sim/blocks/blocks/profound.ts | 6 +++--- apps/sim/tools/profound/bot-logs.ts | 6 +++++- apps/sim/tools/profound/bots-report.ts | 6 +++++- apps/sim/tools/profound/citations-report.ts | 6 +++++- apps/sim/tools/profound/list-optimizations.ts | 4 ++-- apps/sim/tools/profound/prompt-answers.ts | 6 +++++- apps/sim/tools/profound/prompt-volume.ts | 6 +++++- apps/sim/tools/profound/query-fanouts.ts | 6 +++++- apps/sim/tools/profound/raw-logs.ts | 6 +++++- apps/sim/tools/profound/referrals-report.ts | 6 +++++- apps/sim/tools/profound/sentiment-report.ts | 6 +++++- apps/sim/tools/profound/visibility-report.ts | 6 +++++- 12 files changed, 55 insertions(+), 15 deletions(-) diff --git a/apps/sim/blocks/blocks/profound.ts b/apps/sim/blocks/blocks/profound.ts index 8910fd197dd..351436bd9fe 100644 --- a/apps/sim/blocks/blocks/profound.ts +++ b/apps/sim/blocks/blocks/profound.ts @@ -56,7 +56,7 @@ const DIMENSION_OPS = [ 'prompt_volume', ] as const -const FILTER_OPS = [...ALL_REPORT_OPS, 'prompt_answers', 'prompt_volume'] as const +const FILTER_OPS = [...ALL_REPORT_OPS, 'prompt_volume'] as const export const ProfoundBlock: BlockConfig = { type: 'profound', @@ -372,8 +372,8 @@ export const ProfoundBlock: BlockConfig = { if (metricsField && params[metricsField]) { result.metrics = params[metricsField] } - if (params.limit) result.limit = Number(params.limit) - if (params.offset) result.offset = Number(params.offset) + if (params.limit != null) result.limit = Number(params.limit) + if (params.offset != null) result.offset = Number(params.offset) return result }, }, diff --git a/apps/sim/tools/profound/bot-logs.ts b/apps/sim/tools/profound/bot-logs.ts index 72f6d3fc9de..0e5b17b3a28 100644 --- a/apps/sim/tools/profound/bot-logs.ts +++ b/apps/sim/tools/profound/bot-logs.ts @@ -75,7 +75,11 @@ export const profoundBotLogsTool: ToolConfig d.trim()) } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/bots-report.ts b/apps/sim/tools/profound/bots-report.ts index b855e476c40..19e7a33df23 100644 --- a/apps/sim/tools/profound/bots-report.ts +++ b/apps/sim/tools/profound/bots-report.ts @@ -92,7 +92,11 @@ export const profoundBotsReportTool: ToolConfig< body.date_interval = params.dateInterval } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/citations-report.ts b/apps/sim/tools/profound/citations-report.ts index ef973f2d2c5..f9eca8a5e2b 100644 --- a/apps/sim/tools/profound/citations-report.ts +++ b/apps/sim/tools/profound/citations-report.ts @@ -91,7 +91,11 @@ export const profoundCitationsReportTool: ToolConfig< body.date_interval = params.dateInterval } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/list-optimizations.ts b/apps/sim/tools/profound/list-optimizations.ts index 7c36c8adcbf..ca072e9bf71 100644 --- a/apps/sim/tools/profound/list-optimizations.ts +++ b/apps/sim/tools/profound/list-optimizations.ts @@ -42,8 +42,8 @@ export const profoundListOptimizationsTool: ToolConfig< const url = new URL( `https://api.tryprofound.com/v1/content/${encodeURIComponent(params.assetId)}/optimization` ) - if (params.limit) url.searchParams.set('limit', String(params.limit)) - if (params.offset) url.searchParams.set('offset', String(params.offset)) + if (params.limit != null) url.searchParams.set('limit', String(params.limit)) + if (params.offset != null) url.searchParams.set('offset', String(params.offset)) return url.toString() }, method: 'GET', diff --git a/apps/sim/tools/profound/prompt-answers.ts b/apps/sim/tools/profound/prompt-answers.ts index 1fc847d68aa..5b3dac1b207 100644 --- a/apps/sim/tools/profound/prompt-answers.ts +++ b/apps/sim/tools/profound/prompt-answers.ts @@ -65,7 +65,11 @@ export const profoundPromptAnswersTool: ToolConfig< end_date: params.endDate, } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/prompt-volume.ts b/apps/sim/tools/profound/prompt-volume.ts index c74fa19bf92..b8899a7eab3 100644 --- a/apps/sim/tools/profound/prompt-volume.ts +++ b/apps/sim/tools/profound/prompt-volume.ts @@ -85,7 +85,11 @@ export const profoundPromptVolumeTool: ToolConfig< body.date_interval = params.dateInterval } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/query-fanouts.ts b/apps/sim/tools/profound/query-fanouts.ts index c3b4d629bab..8a557f10841 100644 --- a/apps/sim/tools/profound/query-fanouts.ts +++ b/apps/sim/tools/profound/query-fanouts.ts @@ -90,7 +90,11 @@ export const profoundQueryFanoutsTool: ToolConfig< body.date_interval = params.dateInterval } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/raw-logs.ts b/apps/sim/tools/profound/raw-logs.ts index ad4f618b92e..00b4f6d363a 100644 --- a/apps/sim/tools/profound/raw-logs.ts +++ b/apps/sim/tools/profound/raw-logs.ts @@ -75,7 +75,11 @@ export const profoundRawLogsTool: ToolConfig d.trim()) } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/referrals-report.ts b/apps/sim/tools/profound/referrals-report.ts index 3e41db2765a..610eb535a1b 100644 --- a/apps/sim/tools/profound/referrals-report.ts +++ b/apps/sim/tools/profound/referrals-report.ts @@ -93,7 +93,11 @@ export const profoundReferralsReportTool: ToolConfig< body.date_interval = params.dateInterval } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/sentiment-report.ts b/apps/sim/tools/profound/sentiment-report.ts index 9d26d137a83..fd84de389a7 100644 --- a/apps/sim/tools/profound/sentiment-report.ts +++ b/apps/sim/tools/profound/sentiment-report.ts @@ -91,7 +91,11 @@ export const profoundSentimentReportTool: ToolConfig< body.date_interval = params.dateInterval } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } diff --git a/apps/sim/tools/profound/visibility-report.ts b/apps/sim/tools/profound/visibility-report.ts index 9c3a3565f69..64787721b87 100644 --- a/apps/sim/tools/profound/visibility-report.ts +++ b/apps/sim/tools/profound/visibility-report.ts @@ -92,7 +92,11 @@ export const profoundVisibilityReportTool: ToolConfig< body.date_interval = params.dateInterval } if (params.filters) { - body.filters = JSON.parse(params.filters) + try { + body.filters = JSON.parse(params.filters) + } catch { + throw new Error('Invalid JSON in filters parameter') + } } if (params.limit) { body.pagination = { limit: params.limit } From 3fbb67cfc7a9d78ceadbe7b2043fde231a10d3f7 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:43:27 -0700 Subject: [PATCH 05/16] lint --- apps/docs/components/ui/icon-mapping.ts | 14 +++++++------- apps/docs/content/docs/en/tools/meta.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/docs/components/ui/icon-mapping.ts b/apps/docs/components/ui/icon-mapping.ts index e721126adee..2ca6225adf4 100644 --- a/apps/docs/components/ui/icon-mapping.ts +++ b/apps/docs/components/ui/icon-mapping.ts @@ -33,8 +33,8 @@ import { DatadogIcon, DevinIcon, DiscordIcon, - DocumentIcon, DocuSignIcon, + DocumentIcon, DropboxIcon, DsPyIcon, DubIcon, @@ -50,8 +50,8 @@ import { FirecrawlIcon, FirefliesIcon, GammaIcon, - GithubIcon, GitLabIcon, + GithubIcon, GmailIcon, GongIcon, GoogleAdsIcon, @@ -97,9 +97,9 @@ import { LinkupIcon, LoopsIcon, LumaIcon, + MailServerIcon, MailchimpIcon, MailgunIcon, - MailServerIcon, Mem0Icon, MicrosoftDataverseIcon, MicrosoftExcelIcon, @@ -138,6 +138,8 @@ import { RevenueCatIcon, RipplingIcon, S3Icon, + SQSIcon, + STTIcon, SalesforceIcon, SearchIcon, SendgridIcon, @@ -149,19 +151,17 @@ import { SimilarwebIcon, SlackIcon, SmtpIcon, - SQSIcon, SshIcon, - STTIcon, StagehandIcon, StripeIcon, SupabaseIcon, + TTSIcon, TavilyIcon, TelegramIcon, TextractIcon, TinybirdIcon, TranslateIcon, TrelloIcon, - TTSIcon, TwilioIcon, TypeformIcon, UpstashIcon, @@ -173,11 +173,11 @@ import { WikipediaIcon, WordpressIcon, WorkdayIcon, - xIcon, YouTubeIcon, ZendeskIcon, ZepIcon, ZoomIcon, + xIcon, } from '@/components/icons' type IconComponent = ComponentType> diff --git a/apps/docs/content/docs/en/tools/meta.json b/apps/docs/content/docs/en/tools/meta.json index 49ee064ffb1..ea526a4cac8 100644 --- a/apps/docs/content/docs/en/tools/meta.json +++ b/apps/docs/content/docs/en/tools/meta.json @@ -178,4 +178,4 @@ "zep", "zoom" ] -} +} \ No newline at end of file From 217a5aeb531083abcea42a340673078f10deb82b Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:52:59 -0700 Subject: [PATCH 06/16] fix(docs): fix import ordering and trailing newline for docs lint --- apps/docs/components/ui/icon-mapping.ts | 14 +++++++------- apps/docs/content/docs/en/tools/meta.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/docs/components/ui/icon-mapping.ts b/apps/docs/components/ui/icon-mapping.ts index 2ca6225adf4..e721126adee 100644 --- a/apps/docs/components/ui/icon-mapping.ts +++ b/apps/docs/components/ui/icon-mapping.ts @@ -33,8 +33,8 @@ import { DatadogIcon, DevinIcon, DiscordIcon, - DocuSignIcon, DocumentIcon, + DocuSignIcon, DropboxIcon, DsPyIcon, DubIcon, @@ -50,8 +50,8 @@ import { FirecrawlIcon, FirefliesIcon, GammaIcon, - GitLabIcon, GithubIcon, + GitLabIcon, GmailIcon, GongIcon, GoogleAdsIcon, @@ -97,9 +97,9 @@ import { LinkupIcon, LoopsIcon, LumaIcon, - MailServerIcon, MailchimpIcon, MailgunIcon, + MailServerIcon, Mem0Icon, MicrosoftDataverseIcon, MicrosoftExcelIcon, @@ -138,8 +138,6 @@ import { RevenueCatIcon, RipplingIcon, S3Icon, - SQSIcon, - STTIcon, SalesforceIcon, SearchIcon, SendgridIcon, @@ -151,17 +149,19 @@ import { SimilarwebIcon, SlackIcon, SmtpIcon, + SQSIcon, SshIcon, + STTIcon, StagehandIcon, StripeIcon, SupabaseIcon, - TTSIcon, TavilyIcon, TelegramIcon, TextractIcon, TinybirdIcon, TranslateIcon, TrelloIcon, + TTSIcon, TwilioIcon, TypeformIcon, UpstashIcon, @@ -173,11 +173,11 @@ import { WikipediaIcon, WordpressIcon, WorkdayIcon, + xIcon, YouTubeIcon, ZendeskIcon, ZepIcon, ZoomIcon, - xIcon, } from '@/components/icons' type IconComponent = ComponentType> diff --git a/apps/docs/content/docs/en/tools/meta.json b/apps/docs/content/docs/en/tools/meta.json index ea526a4cac8..49ee064ffb1 100644 --- a/apps/docs/content/docs/en/tools/meta.json +++ b/apps/docs/content/docs/en/tools/meta.json @@ -178,4 +178,4 @@ "zep", "zoom" ] -} \ No newline at end of file +} From af439828e892254421f9c220e5eba41639b80990 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:54:36 -0700 Subject: [PATCH 07/16] fix(scripts): sort generated imports to match Biome's organizeImports order --- scripts/generate-docs.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 9f6b4387fa8..8ffd7f9c439 100755 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -210,7 +210,9 @@ function writeIconMapping(iconMapping: Record): void { const iconMappingPath = path.join(rootDir, 'apps/docs/components/ui/icon-mapping.ts') // Get unique icon names - const iconNames = [...new Set(Object.values(iconMapping))].sort() + const iconNames = [...new Set(Object.values(iconMapping))].sort((a, b) => + a.localeCompare(b, 'en', { sensitivity: 'base' }) || a.localeCompare(b) + ) // Generate imports const imports = iconNames.map((icon) => ` ${icon},`).join('\n') @@ -508,7 +510,9 @@ function writeIntegrationsIconMapping(iconMapping: Record): void } const iconMappingPath = path.join(LANDING_INTEGRATIONS_DATA_PATH, 'icon-mapping.ts') - const iconNames = [...new Set(Object.values(iconMapping))].sort() + const iconNames = [...new Set(Object.values(iconMapping))].sort((a, b) => + a.localeCompare(b, 'en', { sensitivity: 'base' }) || a.localeCompare(b) + ) const imports = iconNames.map((icon) => ` ${icon},`).join('\n') const mappingEntries = Object.entries(iconMapping) .sort(([a], [b]) => a.localeCompare(b)) From a224331343eeaf8f512f8ae91b1ec0da9c909a35 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 15:59:11 -0700 Subject: [PATCH 08/16] fix(profound): use != null checks for limit param across all tools --- apps/sim/tools/profound/bot-logs.ts | 2 +- apps/sim/tools/profound/bots-report.ts | 2 +- apps/sim/tools/profound/category-prompts.ts | 2 +- apps/sim/tools/profound/citations-report.ts | 2 +- apps/sim/tools/profound/prompt-answers.ts | 2 +- apps/sim/tools/profound/prompt-volume.ts | 2 +- apps/sim/tools/profound/query-fanouts.ts | 2 +- apps/sim/tools/profound/raw-logs.ts | 2 +- apps/sim/tools/profound/referrals-report.ts | 2 +- apps/sim/tools/profound/sentiment-report.ts | 2 +- apps/sim/tools/profound/visibility-report.ts | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/sim/tools/profound/bot-logs.ts b/apps/sim/tools/profound/bot-logs.ts index 0e5b17b3a28..24c2e96a40a 100644 --- a/apps/sim/tools/profound/bot-logs.ts +++ b/apps/sim/tools/profound/bot-logs.ts @@ -81,7 +81,7 @@ export const profoundBotLogsTool: ToolConfig Date: Mon, 30 Mar 2026 16:00:38 -0700 Subject: [PATCH 09/16] fix(profound): flatten block output type to 'json' to pass block validation test --- apps/sim/blocks/blocks/profound.ts | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/apps/sim/blocks/blocks/profound.ts b/apps/sim/blocks/blocks/profound.ts index 351436bd9fe..ea511d9c0db 100644 --- a/apps/sim/blocks/blocks/profound.ts +++ b/apps/sim/blocks/blocks/profound.ts @@ -400,25 +400,7 @@ export const ProfoundBlock: BlockConfig = { outputs: { response: { - type: { - totalRows: 'number', - data: 'json', - categories: 'json', - regions: 'json', - models: 'json', - domains: 'json', - assets: 'json', - personas: 'json', - topics: 'json', - tags: 'json', - prompts: 'json', - optimizations: 'json', - content: 'json', - aeoContentScore: 'json', - analysis: 'json', - recommendations: 'json', - nextCursor: 'string', - }, + type: 'json', }, }, } From 50fe6f1845e8e79c153bb894c563bf2e3d79764d Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 16:05:23 -0700 Subject: [PATCH 10/16] fix(profound): remove invalid 'required' field from block inputs (not part of ParamConfig) --- apps/sim/blocks/blocks/profound.ts | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/sim/blocks/blocks/profound.ts b/apps/sim/blocks/blocks/profound.ts index ea511d9c0db..47bc3079440 100644 --- a/apps/sim/blocks/blocks/profound.ts +++ b/apps/sim/blocks/blocks/profound.ts @@ -380,22 +380,22 @@ export const ProfoundBlock: BlockConfig = { }, inputs: { - apiKey: { type: 'string', required: true }, - categoryId: { type: 'string', required: false }, - domain: { type: 'string', required: false }, - inputDomain: { type: 'string', required: false }, - assetId: { type: 'string', required: false }, - contentId: { type: 'string', required: false }, - startDate: { type: 'string', required: false }, - endDate: { type: 'string', required: false }, - metrics: { type: 'string', required: false }, - dimensions: { type: 'string', required: false }, - dateInterval: { type: 'string', required: false }, - filters: { type: 'string', required: false }, - limit: { type: 'number', required: false }, - offset: { type: 'number', required: false }, - cursor: { type: 'string', required: false }, - promptType: { type: 'string', required: false }, + apiKey: { type: 'string' }, + categoryId: { type: 'string' }, + domain: { type: 'string' }, + inputDomain: { type: 'string' }, + assetId: { type: 'string' }, + contentId: { type: 'string' }, + startDate: { type: 'string' }, + endDate: { type: 'string' }, + metrics: { type: 'string' }, + dimensions: { type: 'string' }, + dateInterval: { type: 'string' }, + filters: { type: 'string' }, + limit: { type: 'number' }, + offset: { type: 'number' }, + cursor: { type: 'string' }, + promptType: { type: 'string' }, }, outputs: { From a2131bf5473905d8bb7a12cfdb5a30a050183e31 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 16:09:20 -0700 Subject: [PATCH 11/16] fix(profound): rename tool files from kebab-case to snake_case for docs generator compatibility --- .../profound/{bot-logs.ts => bot_logs.ts} | 0 .../{bots-report.ts => bots_report.ts} | 0 ...{category-assets.ts => category_assets.ts} | 0 ...egory-personas.ts => category_personas.ts} | 0 ...ategory-prompts.ts => category_prompts.ts} | 0 .../{category-tags.ts => category_tags.ts} | 0 ...{category-topics.ts => category_topics.ts} | 0 ...itation-prompts.ts => citation_prompts.ts} | 0 ...itations-report.ts => citations_report.ts} | 0 apps/sim/tools/profound/index.ts | 48 +++++++++---------- .../{list-assets.ts => list_assets.ts} | 0 ...{list-categories.ts => list_categories.ts} | 0 .../{list-domains.ts => list_domains.ts} | 0 .../{list-models.ts => list_models.ts} | 0 ...optimizations.ts => list_optimizations.ts} | 0 .../{list-personas.ts => list_personas.ts} | 0 .../{list-regions.ts => list_regions.ts} | 0 ...n-analysis.ts => optimization_analysis.ts} | 0 .../{prompt-answers.ts => prompt_answers.ts} | 0 .../{prompt-volume.ts => prompt_volume.ts} | 0 .../{query-fanouts.ts => query_fanouts.ts} | 0 .../profound/{raw-logs.ts => raw_logs.ts} | 0 ...eferrals-report.ts => referrals_report.ts} | 0 ...entiment-report.ts => sentiment_report.ts} | 0 ...ibility-report.ts => visibility_report.ts} | 0 25 files changed, 24 insertions(+), 24 deletions(-) rename apps/sim/tools/profound/{bot-logs.ts => bot_logs.ts} (100%) rename apps/sim/tools/profound/{bots-report.ts => bots_report.ts} (100%) rename apps/sim/tools/profound/{category-assets.ts => category_assets.ts} (100%) rename apps/sim/tools/profound/{category-personas.ts => category_personas.ts} (100%) rename apps/sim/tools/profound/{category-prompts.ts => category_prompts.ts} (100%) rename apps/sim/tools/profound/{category-tags.ts => category_tags.ts} (100%) rename apps/sim/tools/profound/{category-topics.ts => category_topics.ts} (100%) rename apps/sim/tools/profound/{citation-prompts.ts => citation_prompts.ts} (100%) rename apps/sim/tools/profound/{citations-report.ts => citations_report.ts} (100%) rename apps/sim/tools/profound/{list-assets.ts => list_assets.ts} (100%) rename apps/sim/tools/profound/{list-categories.ts => list_categories.ts} (100%) rename apps/sim/tools/profound/{list-domains.ts => list_domains.ts} (100%) rename apps/sim/tools/profound/{list-models.ts => list_models.ts} (100%) rename apps/sim/tools/profound/{list-optimizations.ts => list_optimizations.ts} (100%) rename apps/sim/tools/profound/{list-personas.ts => list_personas.ts} (100%) rename apps/sim/tools/profound/{list-regions.ts => list_regions.ts} (100%) rename apps/sim/tools/profound/{optimization-analysis.ts => optimization_analysis.ts} (100%) rename apps/sim/tools/profound/{prompt-answers.ts => prompt_answers.ts} (100%) rename apps/sim/tools/profound/{prompt-volume.ts => prompt_volume.ts} (100%) rename apps/sim/tools/profound/{query-fanouts.ts => query_fanouts.ts} (100%) rename apps/sim/tools/profound/{raw-logs.ts => raw_logs.ts} (100%) rename apps/sim/tools/profound/{referrals-report.ts => referrals_report.ts} (100%) rename apps/sim/tools/profound/{sentiment-report.ts => sentiment_report.ts} (100%) rename apps/sim/tools/profound/{visibility-report.ts => visibility_report.ts} (100%) diff --git a/apps/sim/tools/profound/bot-logs.ts b/apps/sim/tools/profound/bot_logs.ts similarity index 100% rename from apps/sim/tools/profound/bot-logs.ts rename to apps/sim/tools/profound/bot_logs.ts diff --git a/apps/sim/tools/profound/bots-report.ts b/apps/sim/tools/profound/bots_report.ts similarity index 100% rename from apps/sim/tools/profound/bots-report.ts rename to apps/sim/tools/profound/bots_report.ts diff --git a/apps/sim/tools/profound/category-assets.ts b/apps/sim/tools/profound/category_assets.ts similarity index 100% rename from apps/sim/tools/profound/category-assets.ts rename to apps/sim/tools/profound/category_assets.ts diff --git a/apps/sim/tools/profound/category-personas.ts b/apps/sim/tools/profound/category_personas.ts similarity index 100% rename from apps/sim/tools/profound/category-personas.ts rename to apps/sim/tools/profound/category_personas.ts diff --git a/apps/sim/tools/profound/category-prompts.ts b/apps/sim/tools/profound/category_prompts.ts similarity index 100% rename from apps/sim/tools/profound/category-prompts.ts rename to apps/sim/tools/profound/category_prompts.ts diff --git a/apps/sim/tools/profound/category-tags.ts b/apps/sim/tools/profound/category_tags.ts similarity index 100% rename from apps/sim/tools/profound/category-tags.ts rename to apps/sim/tools/profound/category_tags.ts diff --git a/apps/sim/tools/profound/category-topics.ts b/apps/sim/tools/profound/category_topics.ts similarity index 100% rename from apps/sim/tools/profound/category-topics.ts rename to apps/sim/tools/profound/category_topics.ts diff --git a/apps/sim/tools/profound/citation-prompts.ts b/apps/sim/tools/profound/citation_prompts.ts similarity index 100% rename from apps/sim/tools/profound/citation-prompts.ts rename to apps/sim/tools/profound/citation_prompts.ts diff --git a/apps/sim/tools/profound/citations-report.ts b/apps/sim/tools/profound/citations_report.ts similarity index 100% rename from apps/sim/tools/profound/citations-report.ts rename to apps/sim/tools/profound/citations_report.ts diff --git a/apps/sim/tools/profound/index.ts b/apps/sim/tools/profound/index.ts index c272eb5736d..7c4ef058d79 100644 --- a/apps/sim/tools/profound/index.ts +++ b/apps/sim/tools/profound/index.ts @@ -1,24 +1,24 @@ -export { profoundBotLogsTool } from './bot-logs' -export { profoundBotsReportTool } from './bots-report' -export { profoundCategoryAssetsTool } from './category-assets' -export { profoundCategoryPersonasTool } from './category-personas' -export { profoundCategoryPromptsTool } from './category-prompts' -export { profoundCategoryTagsTool } from './category-tags' -export { profoundCategoryTopicsTool } from './category-topics' -export { profoundCitationPromptsTool } from './citation-prompts' -export { profoundCitationsReportTool } from './citations-report' -export { profoundListAssetsTool } from './list-assets' -export { profoundListCategoriesTool } from './list-categories' -export { profoundListDomainsTool } from './list-domains' -export { profoundListModelsTool } from './list-models' -export { profoundListOptimizationsTool } from './list-optimizations' -export { profoundListPersonasTool } from './list-personas' -export { profoundListRegionsTool } from './list-regions' -export { profoundOptimizationAnalysisTool } from './optimization-analysis' -export { profoundPromptAnswersTool } from './prompt-answers' -export { profoundPromptVolumeTool } from './prompt-volume' -export { profoundQueryFanoutsTool } from './query-fanouts' -export { profoundRawLogsTool } from './raw-logs' -export { profoundReferralsReportTool } from './referrals-report' -export { profoundSentimentReportTool } from './sentiment-report' -export { profoundVisibilityReportTool } from './visibility-report' +export { profoundBotLogsTool } from './bot_logs' +export { profoundBotsReportTool } from './bots_report' +export { profoundCategoryAssetsTool } from './category_assets' +export { profoundCategoryPersonasTool } from './category_personas' +export { profoundCategoryPromptsTool } from './category_prompts' +export { profoundCategoryTagsTool } from './category_tags' +export { profoundCategoryTopicsTool } from './category_topics' +export { profoundCitationPromptsTool } from './citation_prompts' +export { profoundCitationsReportTool } from './citations_report' +export { profoundListAssetsTool } from './list_assets' +export { profoundListCategoriesTool } from './list_categories' +export { profoundListDomainsTool } from './list_domains' +export { profoundListModelsTool } from './list_models' +export { profoundListOptimizationsTool } from './list_optimizations' +export { profoundListPersonasTool } from './list_personas' +export { profoundListRegionsTool } from './list_regions' +export { profoundOptimizationAnalysisTool } from './optimization_analysis' +export { profoundPromptAnswersTool } from './prompt_answers' +export { profoundPromptVolumeTool } from './prompt_volume' +export { profoundQueryFanoutsTool } from './query_fanouts' +export { profoundRawLogsTool } from './raw_logs' +export { profoundReferralsReportTool } from './referrals_report' +export { profoundSentimentReportTool } from './sentiment_report' +export { profoundVisibilityReportTool } from './visibility_report' diff --git a/apps/sim/tools/profound/list-assets.ts b/apps/sim/tools/profound/list_assets.ts similarity index 100% rename from apps/sim/tools/profound/list-assets.ts rename to apps/sim/tools/profound/list_assets.ts diff --git a/apps/sim/tools/profound/list-categories.ts b/apps/sim/tools/profound/list_categories.ts similarity index 100% rename from apps/sim/tools/profound/list-categories.ts rename to apps/sim/tools/profound/list_categories.ts diff --git a/apps/sim/tools/profound/list-domains.ts b/apps/sim/tools/profound/list_domains.ts similarity index 100% rename from apps/sim/tools/profound/list-domains.ts rename to apps/sim/tools/profound/list_domains.ts diff --git a/apps/sim/tools/profound/list-models.ts b/apps/sim/tools/profound/list_models.ts similarity index 100% rename from apps/sim/tools/profound/list-models.ts rename to apps/sim/tools/profound/list_models.ts diff --git a/apps/sim/tools/profound/list-optimizations.ts b/apps/sim/tools/profound/list_optimizations.ts similarity index 100% rename from apps/sim/tools/profound/list-optimizations.ts rename to apps/sim/tools/profound/list_optimizations.ts diff --git a/apps/sim/tools/profound/list-personas.ts b/apps/sim/tools/profound/list_personas.ts similarity index 100% rename from apps/sim/tools/profound/list-personas.ts rename to apps/sim/tools/profound/list_personas.ts diff --git a/apps/sim/tools/profound/list-regions.ts b/apps/sim/tools/profound/list_regions.ts similarity index 100% rename from apps/sim/tools/profound/list-regions.ts rename to apps/sim/tools/profound/list_regions.ts diff --git a/apps/sim/tools/profound/optimization-analysis.ts b/apps/sim/tools/profound/optimization_analysis.ts similarity index 100% rename from apps/sim/tools/profound/optimization-analysis.ts rename to apps/sim/tools/profound/optimization_analysis.ts diff --git a/apps/sim/tools/profound/prompt-answers.ts b/apps/sim/tools/profound/prompt_answers.ts similarity index 100% rename from apps/sim/tools/profound/prompt-answers.ts rename to apps/sim/tools/profound/prompt_answers.ts diff --git a/apps/sim/tools/profound/prompt-volume.ts b/apps/sim/tools/profound/prompt_volume.ts similarity index 100% rename from apps/sim/tools/profound/prompt-volume.ts rename to apps/sim/tools/profound/prompt_volume.ts diff --git a/apps/sim/tools/profound/query-fanouts.ts b/apps/sim/tools/profound/query_fanouts.ts similarity index 100% rename from apps/sim/tools/profound/query-fanouts.ts rename to apps/sim/tools/profound/query_fanouts.ts diff --git a/apps/sim/tools/profound/raw-logs.ts b/apps/sim/tools/profound/raw_logs.ts similarity index 100% rename from apps/sim/tools/profound/raw-logs.ts rename to apps/sim/tools/profound/raw_logs.ts diff --git a/apps/sim/tools/profound/referrals-report.ts b/apps/sim/tools/profound/referrals_report.ts similarity index 100% rename from apps/sim/tools/profound/referrals-report.ts rename to apps/sim/tools/profound/referrals_report.ts diff --git a/apps/sim/tools/profound/sentiment-report.ts b/apps/sim/tools/profound/sentiment_report.ts similarity index 100% rename from apps/sim/tools/profound/sentiment-report.ts rename to apps/sim/tools/profound/sentiment_report.ts diff --git a/apps/sim/tools/profound/visibility-report.ts b/apps/sim/tools/profound/visibility_report.ts similarity index 100% rename from apps/sim/tools/profound/visibility-report.ts rename to apps/sim/tools/profound/visibility_report.ts From e00be8a2534e4f68b4bbb10349c641f147e9f958 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 16:11:33 -0700 Subject: [PATCH 12/16] lint --- apps/docs/components/ui/icon-mapping.ts | 2 +- apps/docs/content/docs/en/tools/meta.json | 2 +- apps/docs/content/docs/en/tools/profound.mdx | 371 ++++++- .../integrations/data/icon-mapping.ts | 2 +- .../integrations/data/integrations.json | 923 ++++++++++++++---- 5 files changed, 1099 insertions(+), 201 deletions(-) diff --git a/apps/docs/components/ui/icon-mapping.ts b/apps/docs/components/ui/icon-mapping.ts index e721126adee..37f2a676c5e 100644 --- a/apps/docs/components/ui/icon-mapping.ts +++ b/apps/docs/components/ui/icon-mapping.ts @@ -151,9 +151,9 @@ import { SmtpIcon, SQSIcon, SshIcon, - STTIcon, StagehandIcon, StripeIcon, + STTIcon, SupabaseIcon, TavilyIcon, TelegramIcon, diff --git a/apps/docs/content/docs/en/tools/meta.json b/apps/docs/content/docs/en/tools/meta.json index 49ee064ffb1..ea526a4cac8 100644 --- a/apps/docs/content/docs/en/tools/meta.json +++ b/apps/docs/content/docs/en/tools/meta.json @@ -178,4 +178,4 @@ "zep", "zoom" ] -} +} \ No newline at end of file diff --git a/apps/docs/content/docs/en/tools/profound.mdx b/apps/docs/content/docs/en/tools/profound.mdx index c8ea9b70cfc..8f2cb0e83cd 100644 --- a/apps/docs/content/docs/en/tools/profound.mdx +++ b/apps/docs/content/docs/en/tools/profound.mdx @@ -38,266 +38,589 @@ Track how your brand appears across AI platforms. Monitor visibility scores, sen ### `profound_list_categories` +List all organization categories in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `categories` | json | List of organization categories | +| ↳ `id` | string | Category ID | +| ↳ `name` | string | Category name | ### `profound_list_regions` +List all organization regions in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `regions` | json | List of organization regions | +| ↳ `id` | string | Region ID \(UUID\) | +| ↳ `name` | string | Region name | ### `profound_list_models` +List all AI models/platforms tracked in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `models` | json | List of AI models/platforms | +| ↳ `id` | string | Model ID \(UUID\) | +| ↳ `name` | string | Model/platform name | ### `profound_list_domains` +List all organization domains in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `domains` | json | List of organization domains | +| ↳ `id` | string | Domain ID \(UUID\) | +| ↳ `name` | string | Domain name | +| ↳ `createdAt` | string | When the domain was added | ### `profound_list_assets` +List all organization assets (companies/brands) across all categories in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `assets` | json | List of organization assets with category info | +| ↳ `id` | string | Asset ID | +| ↳ `name` | string | Asset/company name | +| ↳ `website` | string | Asset website URL | +| ↳ `alternateDomains` | json | Alternate domain names | +| ↳ `isOwned` | boolean | Whether this asset is owned by the organization | +| ↳ `createdAt` | string | When the asset was created | +| ↳ `logoUrl` | string | URL of the asset logo | +| ↳ `categoryId` | string | Category ID the asset belongs to | +| ↳ `categoryName` | string | Category name | ### `profound_list_personas` +List all organization personas across all categories in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `personas` | json | List of organization personas with profile details | +| ↳ `id` | string | Persona ID | +| ↳ `name` | string | Persona name | +| ↳ `categoryId` | string | Category ID | +| ↳ `categoryName` | string | Category name | +| ↳ `persona` | json | Persona profile with behavior, employment, and demographics | ### `profound_category_topics` +List topics for a specific category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `topics` | json | List of topics in the category | +| ↳ `id` | string | Topic ID \(UUID\) | +| ↳ `name` | string | Topic name | ### `profound_category_tags` +List tags for a specific category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `tags` | json | List of tags in the category | +| ↳ `id` | string | Tag ID \(UUID\) | +| ↳ `name` | string | Tag name | ### `profound_category_prompts` +List prompts for a specific category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | +| `limit` | number | No | Maximum number of results \(default 10000, max 10000\) | +| `cursor` | string | No | Pagination cursor from previous response | +| `orderDir` | string | No | Sort direction: asc or desc \(default desc\) | +| `promptType` | string | No | Comma-separated prompt types to filter: visibility, sentiment | +| `topicId` | string | No | Comma-separated topic IDs \(UUIDs\) to filter by | +| `tagId` | string | No | Comma-separated tag IDs \(UUIDs\) to filter by | +| `regionId` | string | No | Comma-separated region IDs \(UUIDs\) to filter by | +| `platformId` | string | No | Comma-separated platform IDs \(UUIDs\) to filter by | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of prompts | +| `nextCursor` | string | Cursor for next page of results | +| `prompts` | json | List of prompts | +| ↳ `id` | string | Prompt ID | +| ↳ `prompt` | string | Prompt text | +| ↳ `promptType` | string | Prompt type \(visibility or sentiment\) | +| ↳ `topicId` | string | Topic ID | +| ↳ `topicName` | string | Topic name | +| ↳ `tags` | json | Associated tags | +| ↳ `regions` | json | Associated regions | +| ↳ `platforms` | json | Associated platforms | +| ↳ `createdAt` | string | When the prompt was created | ### `profound_category_assets` +List assets (companies/brands) for a specific category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `assets` | json | List of assets in the category | +| ↳ `id` | string | Asset ID | +| ↳ `name` | string | Asset/company name | +| ↳ `website` | string | Website URL | +| ↳ `alternateDomains` | json | Alternate domain names | +| ↳ `isOwned` | boolean | Whether the asset is owned by the organization | +| ↳ `createdAt` | string | When the asset was created | +| ↳ `logoUrl` | string | URL of the asset logo | ### `profound_category_personas` +List personas for a specific category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `personas` | json | List of personas in the category | +| ↳ `id` | string | Persona ID | +| ↳ `name` | string | Persona name | +| ↳ `persona` | json | Persona profile with behavior, employment, and demographics | ### `profound_visibility_report` +Query AI visibility report for a category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | Yes | End date \(YYYY-MM-DD or ISO 8601\) | +| `metrics` | string | Yes | Comma-separated metrics: share_of_voice, mentions_count, visibility_score, executions, average_position | +| `dimensions` | string | No | Comma-separated dimensions: date, region, topic, model, asset_name, prompt, tag, persona | +| `dateInterval` | string | No | Date interval: hour, day, week, month, year | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"asset_name","operator":"is","value":"Company"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of rows in the report | +| `data` | json | Report data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values matching requested metrics order | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_sentiment_report` +Query sentiment report for a category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | Yes | End date \(YYYY-MM-DD or ISO 8601\) | +| `metrics` | string | Yes | Comma-separated metrics: positive, negative, occurrences | +| `dimensions` | string | No | Comma-separated dimensions: theme, date, region, topic, model, asset_name, tag, prompt, sentiment_type, persona | +| `dateInterval` | string | No | Date interval: hour, day, week, month, year | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"asset_name","operator":"is","value":"Company"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of rows in the report | +| `data` | json | Report data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values matching requested metrics order | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_citations_report` +Query citations report for a category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | Yes | End date \(YYYY-MM-DD or ISO 8601\) | +| `metrics` | string | Yes | Comma-separated metrics: count, citation_share | +| `dimensions` | string | No | Comma-separated dimensions: hostname, path, date, region, topic, model, tag, prompt, url, root_domain, persona, citation_category | +| `dateInterval` | string | No | Date interval: hour, day, week, month, year | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"hostname","operator":"is","value":"example.com"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of rows in the report | +| `data` | json | Report data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values matching requested metrics order | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_query_fanouts` +Query fanout report showing how AI models expand prompts into sub-queries in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | Yes | End date \(YYYY-MM-DD or ISO 8601\) | +| `metrics` | string | Yes | Comma-separated metrics: fanouts_per_execution, total_fanouts, share | +| `dimensions` | string | No | Comma-separated dimensions: prompt, query, model, region, date | +| `dateInterval` | string | No | Date interval: hour, day, week, month, year | +| `filters` | string | No | JSON array of filter objects | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of rows in the report | +| `data` | json | Report data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values matching requested metrics order | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_prompt_answers` +Get raw prompt answers data for a category in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `categoryId` | string | Yes | Category ID \(UUID\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | Yes | End date \(YYYY-MM-DD or ISO 8601\) | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"prompt_type","operator":"is","value":"visibility"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of answer rows | +| `data` | json | Raw prompt answer data | +| ↳ `prompt` | string | The prompt text | +| ↳ `promptType` | string | Prompt type \(visibility or sentiment\) | +| ↳ `response` | string | AI model response text | +| ↳ `mentions` | json | Companies/assets mentioned in the response | +| ↳ `citations` | json | URLs cited in the response | +| ↳ `topic` | string | Topic name | +| ↳ `region` | string | Region name | +| ↳ `model` | string | AI model/platform name | +| ↳ `asset` | string | Asset name | +| ↳ `createdAt` | string | Timestamp when the answer was collected | ### `profound_bots_report` +Query bot traffic report with hourly granularity for a domain in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `domain` | string | Yes | Domain to query bot traffic for \(e.g. example.com\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | No | End date \(YYYY-MM-DD or ISO 8601\). Defaults to now | +| `metrics` | string | Yes | Comma-separated metrics: count, citations, indexing, training, last_visit | +| `dimensions` | string | No | Comma-separated dimensions: date, hour, path, bot_name, bot_provider, bot_type | +| `dateInterval` | string | No | Date interval: hour, day, week, month, year | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"bot_name","operator":"is","value":"GPTBot"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of rows in the report | +| `data` | json | Report data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values matching requested metrics order | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_referrals_report` +Query human referral traffic report with hourly granularity for a domain in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `domain` | string | Yes | Domain to query referral traffic for \(e.g. example.com\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | No | End date \(YYYY-MM-DD or ISO 8601\). Defaults to now | +| `metrics` | string | Yes | Comma-separated metrics: visits, last_visit | +| `dimensions` | string | No | Comma-separated dimensions: date, hour, path, referral_source, referral_type | +| `dateInterval` | string | No | Date interval: hour, day, week, month, year | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"referral_source","operator":"is","value":"openai"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of rows in the report | +| `data` | json | Report data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values matching requested metrics order | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_raw_logs` +Get raw traffic logs with filters for a domain in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `domain` | string | Yes | Domain to query logs for \(e.g. example.com\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | No | End date \(YYYY-MM-DD or ISO 8601\). Defaults to now | +| `dimensions` | string | No | Comma-separated dimensions: timestamp, method, host, path, status_code, ip, user_agent, referer, bytes_sent, duration_ms, query_params | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"path","operator":"contains","value":"/blog"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of log entries | +| `data` | json | Log data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values \(count\) | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_bot_logs` +Get identified bot visit logs with filters for a domain in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `domain` | string | Yes | Domain to query bot logs for \(e.g. example.com\) | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | No | End date \(YYYY-MM-DD or ISO 8601\). Defaults to now | +| `dimensions` | string | No | Comma-separated dimensions: timestamp, method, host, path, status_code, ip, user_agent, referer, bytes_sent, duration_ms, query_params, bot_name, bot_provider, bot_types | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"bot_name","operator":"is","value":"GPTBot"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of bot log entries | +| `data` | json | Bot log data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values \(count\) | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_list_optimizations` +List content optimization entries for an asset in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `assetId` | string | Yes | Asset ID \(UUID\) | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | +| `offset` | number | No | Offset for pagination \(default 0\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of optimization entries | +| `optimizations` | json | List of content optimization entries | +| ↳ `id` | string | Optimization ID \(UUID\) | +| ↳ `title` | string | Content title | +| ↳ `createdAt` | string | When the optimization was created | +| ↳ `extractedInput` | string | Extracted input text | +| ↳ `type` | string | Content type: file, text, or url | +| ↳ `status` | string | Optimization status | ### `profound_optimization_analysis` +Get detailed content optimization analysis for a specific content item in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `assetId` | string | Yes | Asset ID \(UUID\) | +| `contentId` | string | Yes | Content/optimization ID \(UUID\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `content` | json | The analyzed content | +| ↳ `format` | string | Content format: markdown or html | +| ↳ `value` | string | Content text | +| `aeoContentScore` | json | AEO content score with target zone | +| ↳ `value` | number | AEO score value | +| ↳ `targetZone` | json | Target zone range | +| ↳ `low` | number | Low end of target range | +| ↳ `high` | number | High end of target range | +| `analysis` | json | Analysis breakdown by category | +| ↳ `breakdown` | json | Array of scoring breakdowns | +| ↳ `title` | string | Category title | +| ↳ `weight` | number | Category weight | +| ↳ `score` | number | Category score | +| `recommendations` | json | Content optimization recommendations | +| ↳ `title` | string | Recommendation title | +| ↳ `status` | string | Status: done or pending | +| ↳ `impact` | json | Impact details with section and score | +| ↳ `suggestion` | json | Suggestion text and rationale | +| ↳ `text` | string | Suggestion text | +| ↳ `rationale` | string | Why this recommendation matters | ### `profound_prompt_volume` +Query prompt volume data to understand search demand across AI platforms in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `startDate` | string | Yes | Start date \(YYYY-MM-DD or ISO 8601\) | +| `endDate` | string | Yes | End date \(YYYY-MM-DD or ISO 8601\) | +| `metrics` | string | Yes | Comma-separated metrics: volume, change | +| `dimensions` | string | No | Comma-separated dimensions: keyword, date, platform, country_code, matching_type, frequency | +| `dateInterval` | string | No | Date interval: hour, day, week, month, year | +| `filters` | string | No | JSON array of filter objects, e.g. \[\{"field":"keyword","operator":"contains","value":"best"\}\] | +| `limit` | number | No | Maximum number of results \(default 10000, max 50000\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `totalRows` | number | Total number of rows in the report | +| `data` | json | Volume data rows with metrics and dimension values | +| ↳ `metrics` | json | Array of metric values matching requested metrics order | +| ↳ `dimensions` | json | Array of dimension values matching requested dimensions order | ### `profound_citation_prompts` +Get prompts that cite a specific domain across AI platforms in Profound + #### Input | Parameter | Type | Required | Description | | --------- | ---- | -------- | ----------- | +| `apiKey` | string | Yes | Profound API Key | +| `inputDomain` | string | Yes | Domain to look up citations for \(e.g. ramp.com\) | #### Output -This tool does not produce any outputs. +| Parameter | Type | Description | +| --------- | ---- | ----------- | +| `data` | json | Citation prompt data for the queried domain | diff --git a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts index 841cda375b3..50143621cc9 100644 --- a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts +++ b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts @@ -151,9 +151,9 @@ import { SmtpIcon, SQSIcon, SshIcon, - STTIcon, StagehandIcon, StripeIcon, + STTIcon, SupabaseIcon, TavilyIcon, TelegramIcon, diff --git a/apps/sim/app/(landing)/integrations/data/integrations.json b/apps/sim/app/(landing)/integrations/data/integrations.json index 2816d7c4ee0..dcb971067cd 100644 --- a/apps/sim/app/(landing)/integrations/data/integrations.json +++ b/apps/sim/app/(landing)/integrations/data/integrations.json @@ -52,7 +52,10 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": ["secrets-management", "identity"] + "tags": [ + "secrets-management", + "identity" + ] }, { "type": "a2a", @@ -103,7 +106,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["agentic", "automation"] + "tags": [ + "agentic", + "automation" + ] }, { "type": "ahrefs", @@ -154,7 +160,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["seo", "marketing", "data-analytics"] + "tags": [ + "seo", + "marketing", + "data-analytics" + ] }, { "type": "airtable", @@ -211,7 +221,10 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": ["spreadsheet", "automation"] + "tags": [ + "spreadsheet", + "automation" + ] }, { "type": "airweave", @@ -229,7 +242,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "algolia", @@ -308,7 +324,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "dynamodb", @@ -355,7 +374,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "rds", @@ -398,7 +420,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "sqs", @@ -421,7 +446,11 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "messaging", "automation"] + "tags": [ + "cloud", + "messaging", + "automation" + ] }, { "type": "amplitude", @@ -484,7 +513,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["data-analytics", "marketing"] + "tags": [ + "data-analytics", + "marketing" + ] }, { "type": "apify", @@ -511,7 +543,11 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation", "data-analytics"] + "tags": [ + "web-scraping", + "automation", + "data-analytics" + ] }, { "type": "apollo", @@ -630,7 +666,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "sales-engagement"] + "tags": [ + "enrichment", + "sales-engagement" + ] }, { "type": "arxiv", @@ -661,7 +700,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["document-processing", "knowledge-base"] + "tags": [ + "document-processing", + "knowledge-base" + ] }, { "type": "asana", @@ -704,7 +746,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing", "automation"] + "tags": [ + "project-management", + "ticketing", + "automation" + ] }, { "type": "ashby", @@ -866,7 +912,9 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": ["hiring"] + "tags": [ + "hiring" + ] }, { "type": "attio", @@ -1136,7 +1184,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "enrichment"] + "tags": [ + "sales-engagement", + "enrichment" + ] }, { "type": "textract_v2", @@ -1154,7 +1205,11 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr", "cloud"] + "tags": [ + "document-processing", + "ocr", + "cloud" + ] }, { "type": "microsoft_ad", @@ -1225,7 +1280,10 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": ["identity", "microsoft-365"] + "tags": [ + "identity", + "microsoft-365" + ] }, { "type": "box", @@ -1304,7 +1362,11 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "content-management", "e-signatures"] + "tags": [ + "cloud", + "content-management", + "e-signatures" + ] }, { "type": "brandfetch", @@ -1331,7 +1393,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "marketing"] + "tags": [ + "enrichment", + "marketing" + ] }, { "type": "browser_use", @@ -1349,7 +1414,11 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation", "agentic"] + "tags": [ + "web-scraping", + "automation", + "agentic" + ] }, { "type": "calcom", @@ -1490,7 +1559,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["scheduling", "calendar", "meeting"] + "tags": [ + "scheduling", + "calendar", + "meeting" + ] }, { "type": "calendly", @@ -1558,7 +1631,11 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": ["scheduling", "calendar", "meeting"] + "tags": [ + "scheduling", + "calendar", + "meeting" + ] }, { "type": "circleback", @@ -1592,7 +1669,11 @@ "authType": "none", "category": "triggers", "integrationType": "ai", - "tags": ["meeting", "note-taking", "automation"] + "tags": [ + "meeting", + "note-taking", + "automation" + ] }, { "type": "clay", @@ -1610,7 +1691,11 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "sales-engagement", "data-analytics"] + "tags": [ + "enrichment", + "sales-engagement", + "data-analytics" + ] }, { "type": "clerk", @@ -1673,7 +1758,10 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": ["identity", "automation"] + "tags": [ + "identity", + "automation" + ] }, { "type": "cloudflare", @@ -1744,7 +1832,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "monitoring"] + "tags": [ + "cloud", + "monitoring" + ] }, { "type": "confluence_v2", @@ -2028,7 +2119,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["knowledge-base", "content-management", "note-taking"] + "tags": [ + "knowledge-base", + "content-management", + "note-taking" + ] }, { "type": "cursor_v2", @@ -2075,7 +2170,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["agentic", "automation"] + "tags": [ + "agentic", + "automation" + ] }, { "type": "databricks", @@ -2126,7 +2224,11 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics", "cloud"] + "tags": [ + "data-warehouse", + "data-analytics", + "cloud" + ] }, { "type": "datadog", @@ -2193,7 +2295,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["monitoring", "incident-management", "error-tracking"] + "tags": [ + "monitoring", + "incident-management", + "error-tracking" + ] }, { "type": "devin", @@ -2228,7 +2334,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["agentic", "automation"] + "tags": [ + "agentic", + "automation" + ] }, { "type": "discord", @@ -2387,7 +2496,11 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "webhooks", "automation"] + "tags": [ + "messaging", + "webhooks", + "automation" + ] }, { "type": "docusign", @@ -2438,7 +2551,10 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["e-signatures", "document-processing"] + "tags": [ + "e-signatures", + "document-processing" + ] }, { "type": "dropbox", @@ -2497,7 +2613,10 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "document-processing"] + "tags": [ + "cloud", + "document-processing" + ] }, { "type": "dspy", @@ -2528,7 +2647,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "agentic", "automation"] + "tags": [ + "llm", + "agentic", + "automation" + ] }, { "type": "dub", @@ -2575,7 +2698,11 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["link-management", "marketing", "data-analytics"] + "tags": [ + "link-management", + "marketing", + "data-analytics" + ] }, { "type": "duckduckgo", @@ -2593,7 +2720,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "seo"] + "tags": [ + "web-scraping", + "seo" + ] }, { "type": "elasticsearch", @@ -2664,7 +2794,10 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["vector-search", "data-analytics"] + "tags": [ + "vector-search", + "data-analytics" + ] }, { "type": "elevenlabs", @@ -2682,7 +2815,9 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["text-to-speech"] + "tags": [ + "text-to-speech" + ] }, { "type": "openai", @@ -2700,7 +2835,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "vector-search"] + "tags": [ + "llm", + "vector-search" + ] }, { "type": "enrich", @@ -2835,7 +2973,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "data-analytics"] + "tags": [ + "enrichment", + "data-analytics" + ] }, { "type": "evernote", @@ -2898,7 +3039,10 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": ["note-taking", "knowledge-base"] + "tags": [ + "note-taking", + "knowledge-base" + ] }, { "type": "exa", @@ -2937,7 +3081,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "enrichment"] + "tags": [ + "web-scraping", + "enrichment" + ] }, { "type": "fathom", @@ -2987,7 +3134,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["meeting", "note-taking"] + "tags": [ + "meeting", + "note-taking" + ] }, { "type": "file_v3", @@ -3005,7 +3155,9 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": ["document-processing"] + "tags": [ + "document-processing" + ] }, { "type": "firecrawl", @@ -3048,7 +3200,10 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation"] + "tags": [ + "web-scraping", + "automation" + ] }, { "type": "fireflies_v2", @@ -3113,7 +3268,11 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["meeting", "speech-to-text", "note-taking"] + "tags": [ + "meeting", + "speech-to-text", + "note-taking" + ] }, { "type": "gamma", @@ -3152,7 +3311,10 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": ["document-processing", "content-management"] + "tags": [ + "document-processing", + "content-management" + ] }, { "type": "github_v2", @@ -3559,7 +3721,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["version-control", "ci-cd"] + "tags": [ + "version-control", + "ci-cd" + ] }, { "type": "gitlab", @@ -3654,7 +3819,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["version-control", "ci-cd"] + "tags": [ + "version-control", + "ci-cd" + ] }, { "type": "gmail_v2", @@ -3721,7 +3889,10 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": ["google-workspace", "messaging"] + "tags": [ + "google-workspace", + "messaging" + ] }, { "type": "gong", @@ -3812,7 +3983,11 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["meeting", "sales-engagement", "speech-to-text"] + "tags": [ + "meeting", + "sales-engagement", + "speech-to-text" + ] }, { "type": "google_ads", @@ -3855,7 +4030,11 @@ "authType": "oauth", "category": "tools", "integrationType": "analytics", - "tags": ["marketing", "google-workspace", "data-analytics"] + "tags": [ + "marketing", + "google-workspace", + "data-analytics" + ] }, { "type": "google_bigquery", @@ -3894,7 +4073,11 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "google-workspace", "data-analytics"] + "tags": [ + "data-warehouse", + "google-workspace", + "data-analytics" + ] }, { "type": "google_books", @@ -3921,7 +4104,11 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["google-workspace", "knowledge-base", "content-management"] + "tags": [ + "google-workspace", + "knowledge-base", + "content-management" + ] }, { "type": "google_calendar_v2", @@ -3980,7 +4167,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["calendar", "scheduling", "google-workspace"] + "tags": [ + "calendar", + "scheduling", + "google-workspace" + ] }, { "type": "google_contacts", @@ -4023,7 +4214,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["google-workspace", "customer-support", "enrichment"] + "tags": [ + "google-workspace", + "customer-support", + "enrichment" + ] }, { "type": "google_docs", @@ -4054,7 +4249,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["google-workspace", "document-processing", "content-management"] + "tags": [ + "google-workspace", + "document-processing", + "content-management" + ] }, { "type": "google_drive", @@ -4129,7 +4328,11 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "google-workspace", "document-processing"] + "tags": [ + "cloud", + "google-workspace", + "document-processing" + ] }, { "type": "google_forms", @@ -4190,7 +4393,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["google-workspace", "forms", "data-analytics"] + "tags": [ + "google-workspace", + "forms", + "data-analytics" + ] }, { "type": "google_groups", @@ -4273,7 +4480,11 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["google-workspace", "messaging", "identity"] + "tags": [ + "google-workspace", + "messaging", + "identity" + ] }, { "type": "google_maps", @@ -4344,7 +4555,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["google-workspace", "enrichment"] + "tags": [ + "google-workspace", + "enrichment" + ] }, { "type": "google_meet", @@ -4387,7 +4601,11 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["meeting", "google-workspace", "scheduling"] + "tags": [ + "meeting", + "google-workspace", + "scheduling" + ] }, { "type": "google_pagespeed", @@ -4405,7 +4623,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["google-workspace", "seo", "monitoring"] + "tags": [ + "google-workspace", + "seo", + "monitoring" + ] }, { "type": "google_search", @@ -4423,7 +4645,11 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["google-workspace", "web-scraping", "seo"] + "tags": [ + "google-workspace", + "web-scraping", + "seo" + ] }, { "type": "google_sheets_v2", @@ -4486,7 +4712,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["spreadsheet", "google-workspace", "data-analytics"] + "tags": [ + "spreadsheet", + "google-workspace", + "data-analytics" + ] }, { "type": "google_slides_v2", @@ -4561,7 +4791,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["google-workspace", "document-processing", "content-management"] + "tags": [ + "google-workspace", + "document-processing", + "content-management" + ] }, { "type": "google_tasks", @@ -4604,7 +4838,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["google-workspace", "project-management", "scheduling"] + "tags": [ + "google-workspace", + "project-management", + "scheduling" + ] }, { "type": "google_translate", @@ -4631,7 +4869,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["google-workspace", "content-management", "automation"] + "tags": [ + "google-workspace", + "content-management", + "automation" + ] }, { "type": "google_vault", @@ -4678,7 +4920,11 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": ["google-workspace", "secrets-management", "document-processing"] + "tags": [ + "google-workspace", + "secrets-management", + "document-processing" + ] }, { "type": "grafana", @@ -4773,7 +5019,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["monitoring", "data-analytics"] + "tags": [ + "monitoring", + "data-analytics" + ] }, { "type": "grain", @@ -4869,7 +5118,10 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["meeting", "note-taking"] + "tags": [ + "meeting", + "note-taking" + ] }, { "type": "granola", @@ -4896,7 +5148,10 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": ["meeting", "note-taking"] + "tags": [ + "meeting", + "note-taking" + ] }, { "type": "greenhouse", @@ -4959,7 +5214,9 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": ["hiring"] + "tags": [ + "hiring" + ] }, { "type": "greptile", @@ -4994,7 +5251,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["version-control", "knowledge-base"] + "tags": [ + "version-control", + "knowledge-base" + ] }, { "type": "hex", @@ -5077,7 +5337,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "hubspot", @@ -5303,7 +5566,11 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["marketing", "sales-engagement", "customer-support"] + "tags": [ + "marketing", + "sales-engagement", + "customer-support" + ] }, { "type": "huggingface", @@ -5321,7 +5588,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "agentic"] + "tags": [ + "llm", + "agentic" + ] }, { "type": "hunter", @@ -5364,7 +5634,10 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": ["enrichment", "sales-engagement"] + "tags": [ + "enrichment", + "sales-engagement" + ] }, { "type": "image_generator", @@ -5382,7 +5655,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["image-generation", "llm"] + "tags": [ + "image-generation", + "llm" + ] }, { "type": "imap", @@ -5406,7 +5682,10 @@ "authType": "none", "category": "triggers", "integrationType": "email", - "tags": ["messaging", "automation"] + "tags": [ + "messaging", + "automation" + ] }, { "type": "incidentio", @@ -5601,7 +5880,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["incident-management", "monitoring"] + "tags": [ + "incident-management", + "monitoring" + ] }, { "type": "infisical", @@ -5640,7 +5922,9 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": ["secrets-management"] + "tags": [ + "secrets-management" + ] }, { "type": "intercom_v2", @@ -5783,7 +6067,10 @@ "authType": "api-key", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "messaging"] + "tags": [ + "customer-support", + "messaging" + ] }, { "type": "jina", @@ -5810,7 +6097,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "knowledge-base"] + "tags": [ + "web-scraping", + "knowledge-base" + ] }, { "type": "jira", @@ -5956,7 +6246,10 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing"] + "tags": [ + "project-management", + "ticketing" + ] }, { "type": "jira_service_management", @@ -6059,7 +6352,11 @@ "authType": "oauth", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "ticketing", "incident-management"] + "tags": [ + "customer-support", + "ticketing", + "incident-management" + ] }, { "type": "kalshi_v2", @@ -6146,7 +6443,10 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["prediction-markets", "data-analytics"] + "tags": [ + "prediction-markets", + "data-analytics" + ] }, { "type": "ketch", @@ -6185,7 +6485,9 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": ["identity"] + "tags": [ + "identity" + ] }, { "type": "knowledge", @@ -6285,7 +6587,11 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["monitoring", "llm", "data-analytics"] + "tags": [ + "monitoring", + "llm", + "data-analytics" + ] }, { "type": "lemlist", @@ -6362,7 +6668,11 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["sales-engagement", "email-marketing", "automation"] + "tags": [ + "sales-engagement", + "email-marketing", + "automation" + ] }, { "type": "linear", @@ -6769,7 +7079,10 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing"] + "tags": [ + "project-management", + "ticketing" + ] }, { "type": "linkedin", @@ -6796,7 +7109,11 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": ["marketing", "sales-engagement", "enrichment"] + "tags": [ + "marketing", + "sales-engagement", + "enrichment" + ] }, { "type": "linkup", @@ -6814,7 +7131,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "enrichment"] + "tags": [ + "web-scraping", + "enrichment" + ] }, { "type": "loops", @@ -6873,7 +7193,11 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "marketing", "automation"] + "tags": [ + "email-marketing", + "marketing", + "automation" + ] }, { "type": "luma", @@ -6916,7 +7240,11 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": ["events", "calendar", "scheduling"] + "tags": [ + "events", + "calendar", + "scheduling" + ] }, { "type": "mailchimp", @@ -7227,7 +7555,11 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "marketing", "automation"] + "tags": [ + "email-marketing", + "marketing", + "automation" + ] }, { "type": "mailgun", @@ -7278,7 +7610,10 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["messaging", "email-marketing"] + "tags": [ + "messaging", + "email-marketing" + ] }, { "type": "mem0", @@ -7309,7 +7644,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "knowledge-base", "agentic"] + "tags": [ + "llm", + "knowledge-base", + "agentic" + ] }, { "type": "memory", @@ -7429,7 +7768,11 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": ["microsoft-365", "data-warehouse", "cloud"] + "tags": [ + "microsoft-365", + "data-warehouse", + "cloud" + ] }, { "type": "microsoft_excel_v2", @@ -7456,7 +7799,10 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["spreadsheet", "microsoft-365"] + "tags": [ + "spreadsheet", + "microsoft-365" + ] }, { "type": "microsoft_planner", @@ -7527,7 +7873,11 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "microsoft-365", "ticketing"] + "tags": [ + "project-management", + "microsoft-365", + "ticketing" + ] }, { "type": "microsoft_teams", @@ -7608,7 +7958,10 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "microsoft-365"] + "tags": [ + "messaging", + "microsoft-365" + ] }, { "type": "mistral_parse_v3", @@ -7626,7 +7979,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr"] + "tags": [ + "document-processing", + "ocr" + ] }, { "type": "mongodb", @@ -7669,7 +8025,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "cloud"] + "tags": [ + "data-warehouse", + "cloud" + ] }, { "type": "mysql", @@ -7712,7 +8071,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "neo4j", @@ -7759,7 +8121,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "notion_v2", @@ -7777,7 +8142,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["note-taking", "knowledge-base", "content-management"] + "tags": [ + "note-taking", + "knowledge-base", + "content-management" + ] }, { "type": "obsidian", @@ -7856,7 +8225,10 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": ["note-taking", "knowledge-base"] + "tags": [ + "note-taking", + "knowledge-base" + ] }, { "type": "okta", @@ -7947,7 +8319,10 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": ["identity", "automation"] + "tags": [ + "identity", + "automation" + ] }, { "type": "onedrive", @@ -7990,7 +8365,11 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": ["microsoft-365", "cloud", "document-processing"] + "tags": [ + "microsoft-365", + "cloud", + "document-processing" + ] }, { "type": "outlook", @@ -8045,7 +8424,11 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": ["microsoft-365", "messaging", "automation"] + "tags": [ + "microsoft-365", + "messaging", + "automation" + ] }, { "type": "pagerduty", @@ -8088,7 +8471,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["incident-management", "monitoring"] + "tags": [ + "incident-management", + "monitoring" + ] }, { "type": "parallel_ai", @@ -8119,7 +8505,11 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "llm", "agentic"] + "tags": [ + "web-scraping", + "llm", + "agentic" + ] }, { "type": "perplexity", @@ -8146,7 +8536,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "web-scraping", "agentic"] + "tags": [ + "llm", + "web-scraping", + "agentic" + ] }, { "type": "pinecone", @@ -8185,7 +8579,10 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "pipedrive", @@ -8276,7 +8673,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "project-management"] + "tags": [ + "sales-engagement", + "project-management" + ] }, { "type": "polymarket", @@ -8375,7 +8775,10 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["prediction-markets", "data-analytics"] + "tags": [ + "prediction-markets", + "data-analytics" + ] }, { "type": "postgresql", @@ -8418,7 +8821,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "posthog", @@ -8609,7 +9015,10 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["data-analytics", "monitoring"] + "tags": [ + "data-analytics", + "monitoring" + ] }, { "type": "profound", @@ -8724,7 +9133,10 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["seo", "data-analytics"] + "tags": [ + "seo", + "data-analytics" + ] }, { "type": "pulse_v2", @@ -8742,7 +9154,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr"] + "tags": [ + "document-processing", + "ocr" + ] }, { "type": "qdrant", @@ -8773,7 +9188,10 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["vector-search", "knowledge-base"] + "tags": [ + "vector-search", + "knowledge-base" + ] }, { "type": "quiver", @@ -8804,7 +9222,9 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": ["image-generation"] + "tags": [ + "image-generation" + ] }, { "type": "reddit", @@ -8891,7 +9311,10 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": ["content-management", "web-scraping"] + "tags": [ + "content-management", + "web-scraping" + ] }, { "type": "redis", @@ -8998,7 +9421,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "reducto_v2", @@ -9016,7 +9442,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "ocr"] + "tags": [ + "document-processing", + "ocr" + ] }, { "type": "resend", @@ -9067,7 +9496,10 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "messaging"] + "tags": [ + "email-marketing", + "messaging" + ] }, { "type": "revenuecat", @@ -9126,7 +9558,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": ["payments", "subscriptions"] + "tags": [ + "payments", + "subscriptions" + ] }, { "type": "rippling", @@ -9221,7 +9656,9 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": ["hiring"] + "tags": [ + "hiring" + ] }, { "type": "s3", @@ -9260,7 +9697,10 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "salesforce", @@ -9419,7 +9859,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "customer-support"] + "tags": [ + "sales-engagement", + "customer-support" + ] }, { "type": "search", @@ -9437,7 +9880,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "seo"] + "tags": [ + "web-scraping", + "seo" + ] }, { "type": "sendgrid", @@ -9520,7 +9966,10 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "messaging"] + "tags": [ + "email-marketing", + "messaging" + ] }, { "type": "sentry", @@ -9587,7 +10036,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["error-tracking", "monitoring"] + "tags": [ + "error-tracking", + "monitoring" + ] }, { "type": "serper", @@ -9605,7 +10057,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "seo"] + "tags": [ + "web-scraping", + "seo" + ] }, { "type": "servicenow", @@ -9640,7 +10095,11 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "ticketing", "incident-management"] + "tags": [ + "customer-support", + "ticketing", + "incident-management" + ] }, { "type": "sftp", @@ -9683,7 +10142,10 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": ["cloud", "automation"] + "tags": [ + "cloud", + "automation" + ] }, { "type": "sharepoint", @@ -9734,7 +10196,11 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": ["microsoft-365", "content-management", "document-processing"] + "tags": [ + "microsoft-365", + "content-management", + "document-processing" + ] }, { "type": "shopify", @@ -9837,7 +10303,10 @@ "authType": "oauth", "category": "tools", "integrationType": "ecommerce", - "tags": ["payments", "subscriptions"] + "tags": [ + "payments", + "subscriptions" + ] }, { "type": "similarweb", @@ -9876,7 +10345,11 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": ["marketing", "data-analytics", "seo"] + "tags": [ + "marketing", + "data-analytics", + "seo" + ] }, { "type": "slack", @@ -10001,7 +10474,11 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "webhooks", "automation"] + "tags": [ + "messaging", + "webhooks", + "automation" + ] }, { "type": "smtp", @@ -10019,7 +10496,10 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": ["email-marketing", "messaging"] + "tags": [ + "email-marketing", + "messaging" + ] }, { "type": "stt_v2", @@ -10037,7 +10517,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["speech-to-text", "document-processing"] + "tags": [ + "speech-to-text", + "document-processing" + ] }, { "type": "ssh", @@ -10108,7 +10591,10 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "automation"] + "tags": [ + "cloud", + "automation" + ] }, { "type": "stagehand", @@ -10135,7 +10621,11 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": ["web-scraping", "automation", "agentic"] + "tags": [ + "web-scraping", + "automation", + "agentic" + ] }, { "type": "stripe", @@ -10360,7 +10850,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": ["payments", "subscriptions", "webhooks"] + "tags": [ + "payments", + "subscriptions", + "webhooks" + ] }, { "type": "supabase", @@ -10467,7 +10961,11 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse", "vector-search"] + "tags": [ + "cloud", + "data-warehouse", + "vector-search" + ] }, { "type": "tavily", @@ -10502,7 +11000,10 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": ["web-scraping", "enrichment"] + "tags": [ + "web-scraping", + "enrichment" + ] }, { "type": "telegram", @@ -10555,7 +11056,11 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "webhooks", "automation"] + "tags": [ + "messaging", + "webhooks", + "automation" + ] }, { "type": "tts", @@ -10573,7 +11078,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["text-to-speech", "llm"] + "tags": [ + "text-to-speech", + "llm" + ] }, { "type": "tinybird", @@ -10600,7 +11108,10 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": ["data-warehouse", "data-analytics"] + "tags": [ + "data-warehouse", + "data-analytics" + ] }, { "type": "translate", @@ -10618,7 +11129,10 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": ["document-processing", "llm"] + "tags": [ + "document-processing", + "llm" + ] }, { "type": "trello", @@ -10661,7 +11175,10 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": ["project-management", "ticketing"] + "tags": [ + "project-management", + "ticketing" + ] }, { "type": "twilio_sms", @@ -10679,7 +11196,10 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "automation"] + "tags": [ + "messaging", + "automation" + ] }, { "type": "twilio_voice", @@ -10716,7 +11236,10 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "text-to-speech"] + "tags": [ + "messaging", + "text-to-speech" + ] }, { "type": "typeform", @@ -10773,7 +11296,10 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": ["forms", "data-analytics"] + "tags": [ + "forms", + "data-analytics" + ] }, { "type": "upstash", @@ -10856,7 +11382,10 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": ["cloud", "data-warehouse"] + "tags": [ + "cloud", + "data-warehouse" + ] }, { "type": "vercel", @@ -11075,7 +11604,10 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": ["cloud", "ci-cd"] + "tags": [ + "cloud", + "ci-cd" + ] }, { "type": "video_generator_v2", @@ -11093,7 +11625,10 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["video-generation", "llm"] + "tags": [ + "video-generation", + "llm" + ] }, { "type": "vision_v2", @@ -11111,7 +11646,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "document-processing", "ocr"] + "tags": [ + "llm", + "document-processing", + "ocr" + ] }, { "type": "wealthbox", @@ -11154,7 +11693,10 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": ["sales-engagement", "customer-support"] + "tags": [ + "sales-engagement", + "customer-support" + ] }, { "type": "webflow", @@ -11214,7 +11756,10 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": ["content-management", "seo"] + "tags": [ + "content-management", + "seo" + ] }, { "type": "whatsapp", @@ -11238,7 +11783,10 @@ "authType": "api-key", "category": "tools", "integrationType": "communication", - "tags": ["messaging", "automation"] + "tags": [ + "messaging", + "automation" + ] }, { "type": "wikipedia", @@ -11273,7 +11821,10 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": ["knowledge-base", "web-scraping"] + "tags": [ + "knowledge-base", + "web-scraping" + ] }, { "type": "wordpress", @@ -11396,7 +11947,10 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": ["content-management", "seo"] + "tags": [ + "content-management", + "seo" + ] }, { "type": "workday", @@ -11455,7 +12009,10 @@ "authType": "none", "category": "tools", "integrationType": "hr", - "tags": ["hiring", "project-management"] + "tags": [ + "hiring", + "project-management" + ] }, { "type": "x", @@ -11586,7 +12143,10 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": ["marketing", "messaging"] + "tags": [ + "marketing", + "messaging" + ] }, { "type": "youtube", @@ -11641,7 +12201,11 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": ["google-workspace", "marketing", "content-management"] + "tags": [ + "google-workspace", + "marketing", + "content-management" + ] }, { "type": "zendesk", @@ -11764,7 +12328,10 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": ["customer-support", "ticketing"] + "tags": [ + "customer-support", + "ticketing" + ] }, { "type": "zep", @@ -11819,7 +12386,11 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": ["llm", "knowledge-base", "agentic"] + "tags": [ + "llm", + "knowledge-base", + "agentic" + ] }, { "type": "zoom", @@ -11878,6 +12449,10 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": ["meeting", "calendar", "scheduling"] + "tags": [ + "meeting", + "calendar", + "scheduling" + ] } -] +] \ No newline at end of file From 8f629d95e4f35d5c7e78cad83ddecbf14f236e42 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 16:17:00 -0700 Subject: [PATCH 13/16] fix(docs): let biome auto-fix import order, revert custom sort in generator --- apps/docs/components/ui/icon-mapping.ts | 2 +- apps/docs/content/docs/en/tools/meta.json | 2 +- scripts/generate-docs.ts | 8 ++------ 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/docs/components/ui/icon-mapping.ts b/apps/docs/components/ui/icon-mapping.ts index 37f2a676c5e..e721126adee 100644 --- a/apps/docs/components/ui/icon-mapping.ts +++ b/apps/docs/components/ui/icon-mapping.ts @@ -151,9 +151,9 @@ import { SmtpIcon, SQSIcon, SshIcon, + STTIcon, StagehandIcon, StripeIcon, - STTIcon, SupabaseIcon, TavilyIcon, TelegramIcon, diff --git a/apps/docs/content/docs/en/tools/meta.json b/apps/docs/content/docs/en/tools/meta.json index ea526a4cac8..49ee064ffb1 100644 --- a/apps/docs/content/docs/en/tools/meta.json +++ b/apps/docs/content/docs/en/tools/meta.json @@ -178,4 +178,4 @@ "zep", "zoom" ] -} \ No newline at end of file +} diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 8ffd7f9c439..9f6b4387fa8 100755 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -210,9 +210,7 @@ function writeIconMapping(iconMapping: Record): void { const iconMappingPath = path.join(rootDir, 'apps/docs/components/ui/icon-mapping.ts') // Get unique icon names - const iconNames = [...new Set(Object.values(iconMapping))].sort((a, b) => - a.localeCompare(b, 'en', { sensitivity: 'base' }) || a.localeCompare(b) - ) + const iconNames = [...new Set(Object.values(iconMapping))].sort() // Generate imports const imports = iconNames.map((icon) => ` ${icon},`).join('\n') @@ -510,9 +508,7 @@ function writeIntegrationsIconMapping(iconMapping: Record): void } const iconMappingPath = path.join(LANDING_INTEGRATIONS_DATA_PATH, 'icon-mapping.ts') - const iconNames = [...new Set(Object.values(iconMapping))].sort((a, b) => - a.localeCompare(b, 'en', { sensitivity: 'base' }) || a.localeCompare(b) - ) + const iconNames = [...new Set(Object.values(iconMapping))].sort() const imports = iconNames.map((icon) => ` ${icon},`).join('\n') const mappingEntries = Object.entries(iconMapping) .sort(([a], [b]) => a.localeCompare(b)) From d8e3875feecb62a9d814212cbd16f9b9bdca11eb Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 16:17:16 -0700 Subject: [PATCH 14/16] fix(landing): fix import order in sim icon-mapping via biome --- apps/sim/app/(landing)/integrations/data/icon-mapping.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts index 50143621cc9..841cda375b3 100644 --- a/apps/sim/app/(landing)/integrations/data/icon-mapping.ts +++ b/apps/sim/app/(landing)/integrations/data/icon-mapping.ts @@ -151,9 +151,9 @@ import { SmtpIcon, SQSIcon, SshIcon, + STTIcon, StagehandIcon, StripeIcon, - STTIcon, SupabaseIcon, TavilyIcon, TelegramIcon, From 6fc703899017e7936ae8de5a7c581b3014552e9d Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 16:19:58 -0700 Subject: [PATCH 15/16] fix(scripts): match Biome's exact import sort order in docs generator --- scripts/generate-docs.ts | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 9f6b4387fa8..1fb35cf96fd 100755 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -205,12 +205,27 @@ async function generateIconMapping(): Promise> { * Write the icon mapping to the docs app * This file is imported by BlockInfoCard to resolve icons automatically */ +/** + * Sort strings to match Biome's organizeImports order: + * case-insensitive character-by-character, uppercase before lowercase as tiebreaker. + */ +function biomeSortCompare(a: string, b: string): number { + const minLen = Math.min(a.length, b.length) + for (let i = 0; i < minLen; i++) { + const al = a[i].toLowerCase() + const bl = b[i].toLowerCase() + if (al !== bl) return al < bl ? -1 : 1 + if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1 + } + return a.length - b.length +} + function writeIconMapping(iconMapping: Record): void { try { const iconMappingPath = path.join(rootDir, 'apps/docs/components/ui/icon-mapping.ts') - // Get unique icon names - const iconNames = [...new Set(Object.values(iconMapping))].sort() + // Get unique icon names, sorted to match Biome's organizeImports + const iconNames = [...new Set(Object.values(iconMapping))].sort(biomeSortCompare) // Generate imports const imports = iconNames.map((icon) => ` ${icon},`).join('\n') @@ -508,7 +523,7 @@ function writeIntegrationsIconMapping(iconMapping: Record): void } const iconMappingPath = path.join(LANDING_INTEGRATIONS_DATA_PATH, 'icon-mapping.ts') - const iconNames = [...new Set(Object.values(iconMapping))].sort() + const iconNames = [...new Set(Object.values(iconMapping))].sort(biomeSortCompare) const imports = iconNames.map((icon) => ` ${icon},`).join('\n') const mappingEntries = Object.entries(iconMapping) .sort(([a], [b]) => a.localeCompare(b)) From 23865033486ca2b0a9d7aa5902fe36b2eadf3154 Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Mon, 30 Mar 2026 16:25:30 -0700 Subject: [PATCH 16/16] fix(generate-docs): produce Biome-compatible JSON output The generator wrote multi-line arrays for short string arrays (like tags) and omitted trailing newlines, causing Biome format check failures in CI. Post-process integrations.json to collapse short arrays onto single lines and add trailing newlines to both integrations.json and meta.json. Co-Authored-By: Claude Opus 4.6 --- .../integrations/data/integrations.json | 923 ++++-------------- scripts/generate-docs.ts | 13 +- 2 files changed, 185 insertions(+), 751 deletions(-) diff --git a/apps/sim/app/(landing)/integrations/data/integrations.json b/apps/sim/app/(landing)/integrations/data/integrations.json index dcb971067cd..2816d7c4ee0 100644 --- a/apps/sim/app/(landing)/integrations/data/integrations.json +++ b/apps/sim/app/(landing)/integrations/data/integrations.json @@ -52,10 +52,7 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": [ - "secrets-management", - "identity" - ] + "tags": ["secrets-management", "identity"] }, { "type": "a2a", @@ -106,10 +103,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "agentic", - "automation" - ] + "tags": ["agentic", "automation"] }, { "type": "ahrefs", @@ -160,11 +154,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "seo", - "marketing", - "data-analytics" - ] + "tags": ["seo", "marketing", "data-analytics"] }, { "type": "airtable", @@ -221,10 +211,7 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": [ - "spreadsheet", - "automation" - ] + "tags": ["spreadsheet", "automation"] }, { "type": "airweave", @@ -242,10 +229,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "algolia", @@ -324,10 +308,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "dynamodb", @@ -374,10 +355,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "rds", @@ -420,10 +398,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "sqs", @@ -446,11 +421,7 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "messaging", - "automation" - ] + "tags": ["cloud", "messaging", "automation"] }, { "type": "amplitude", @@ -513,10 +484,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-analytics", - "marketing" - ] + "tags": ["data-analytics", "marketing"] }, { "type": "apify", @@ -543,11 +511,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation", - "data-analytics" - ] + "tags": ["web-scraping", "automation", "data-analytics"] }, { "type": "apollo", @@ -666,10 +630,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "sales-engagement" - ] + "tags": ["enrichment", "sales-engagement"] }, { "type": "arxiv", @@ -700,10 +661,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "document-processing", - "knowledge-base" - ] + "tags": ["document-processing", "knowledge-base"] }, { "type": "asana", @@ -746,11 +704,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing", - "automation" - ] + "tags": ["project-management", "ticketing", "automation"] }, { "type": "ashby", @@ -912,9 +866,7 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring" - ] + "tags": ["hiring"] }, { "type": "attio", @@ -1184,10 +1136,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "enrichment" - ] + "tags": ["sales-engagement", "enrichment"] }, { "type": "textract_v2", @@ -1205,11 +1154,7 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr", - "cloud" - ] + "tags": ["document-processing", "ocr", "cloud"] }, { "type": "microsoft_ad", @@ -1280,10 +1225,7 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": [ - "identity", - "microsoft-365" - ] + "tags": ["identity", "microsoft-365"] }, { "type": "box", @@ -1362,11 +1304,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "content-management", - "e-signatures" - ] + "tags": ["cloud", "content-management", "e-signatures"] }, { "type": "brandfetch", @@ -1393,10 +1331,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "marketing" - ] + "tags": ["enrichment", "marketing"] }, { "type": "browser_use", @@ -1414,11 +1349,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation", - "agentic" - ] + "tags": ["web-scraping", "automation", "agentic"] }, { "type": "calcom", @@ -1559,11 +1490,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "scheduling", - "calendar", - "meeting" - ] + "tags": ["scheduling", "calendar", "meeting"] }, { "type": "calendly", @@ -1631,11 +1558,7 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": [ - "scheduling", - "calendar", - "meeting" - ] + "tags": ["scheduling", "calendar", "meeting"] }, { "type": "circleback", @@ -1669,11 +1592,7 @@ "authType": "none", "category": "triggers", "integrationType": "ai", - "tags": [ - "meeting", - "note-taking", - "automation" - ] + "tags": ["meeting", "note-taking", "automation"] }, { "type": "clay", @@ -1691,11 +1610,7 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "sales-engagement", - "data-analytics" - ] + "tags": ["enrichment", "sales-engagement", "data-analytics"] }, { "type": "clerk", @@ -1758,10 +1673,7 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": [ - "identity", - "automation" - ] + "tags": ["identity", "automation"] }, { "type": "cloudflare", @@ -1832,10 +1744,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "monitoring" - ] + "tags": ["cloud", "monitoring"] }, { "type": "confluence_v2", @@ -2119,11 +2028,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "knowledge-base", - "content-management", - "note-taking" - ] + "tags": ["knowledge-base", "content-management", "note-taking"] }, { "type": "cursor_v2", @@ -2170,10 +2075,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "agentic", - "automation" - ] + "tags": ["agentic", "automation"] }, { "type": "databricks", @@ -2224,11 +2126,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics", - "cloud" - ] + "tags": ["data-warehouse", "data-analytics", "cloud"] }, { "type": "datadog", @@ -2295,11 +2193,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "monitoring", - "incident-management", - "error-tracking" - ] + "tags": ["monitoring", "incident-management", "error-tracking"] }, { "type": "devin", @@ -2334,10 +2228,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "agentic", - "automation" - ] + "tags": ["agentic", "automation"] }, { "type": "discord", @@ -2496,11 +2387,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "webhooks", - "automation" - ] + "tags": ["messaging", "webhooks", "automation"] }, { "type": "docusign", @@ -2551,10 +2438,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "e-signatures", - "document-processing" - ] + "tags": ["e-signatures", "document-processing"] }, { "type": "dropbox", @@ -2613,10 +2497,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "document-processing" - ] + "tags": ["cloud", "document-processing"] }, { "type": "dspy", @@ -2647,11 +2528,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "agentic", - "automation" - ] + "tags": ["llm", "agentic", "automation"] }, { "type": "dub", @@ -2698,11 +2575,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "link-management", - "marketing", - "data-analytics" - ] + "tags": ["link-management", "marketing", "data-analytics"] }, { "type": "duckduckgo", @@ -2720,10 +2593,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "seo" - ] + "tags": ["web-scraping", "seo"] }, { "type": "elasticsearch", @@ -2794,10 +2664,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "vector-search", - "data-analytics" - ] + "tags": ["vector-search", "data-analytics"] }, { "type": "elevenlabs", @@ -2815,9 +2682,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "text-to-speech" - ] + "tags": ["text-to-speech"] }, { "type": "openai", @@ -2835,10 +2700,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "vector-search" - ] + "tags": ["llm", "vector-search"] }, { "type": "enrich", @@ -2973,10 +2835,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "data-analytics" - ] + "tags": ["enrichment", "data-analytics"] }, { "type": "evernote", @@ -3039,10 +2898,7 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": [ - "note-taking", - "knowledge-base" - ] + "tags": ["note-taking", "knowledge-base"] }, { "type": "exa", @@ -3081,10 +2937,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "enrichment" - ] + "tags": ["web-scraping", "enrichment"] }, { "type": "fathom", @@ -3134,10 +2987,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "meeting", - "note-taking" - ] + "tags": ["meeting", "note-taking"] }, { "type": "file_v3", @@ -3155,9 +3005,7 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": [ - "document-processing" - ] + "tags": ["document-processing"] }, { "type": "firecrawl", @@ -3200,10 +3048,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation" - ] + "tags": ["web-scraping", "automation"] }, { "type": "fireflies_v2", @@ -3268,11 +3113,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "meeting", - "speech-to-text", - "note-taking" - ] + "tags": ["meeting", "speech-to-text", "note-taking"] }, { "type": "gamma", @@ -3311,10 +3152,7 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": [ - "document-processing", - "content-management" - ] + "tags": ["document-processing", "content-management"] }, { "type": "github_v2", @@ -3721,10 +3559,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "version-control", - "ci-cd" - ] + "tags": ["version-control", "ci-cd"] }, { "type": "gitlab", @@ -3819,10 +3654,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "version-control", - "ci-cd" - ] + "tags": ["version-control", "ci-cd"] }, { "type": "gmail_v2", @@ -3889,10 +3721,7 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": [ - "google-workspace", - "messaging" - ] + "tags": ["google-workspace", "messaging"] }, { "type": "gong", @@ -3983,11 +3812,7 @@ "authType": "none", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "meeting", - "sales-engagement", - "speech-to-text" - ] + "tags": ["meeting", "sales-engagement", "speech-to-text"] }, { "type": "google_ads", @@ -4030,11 +3855,7 @@ "authType": "oauth", "category": "tools", "integrationType": "analytics", - "tags": [ - "marketing", - "google-workspace", - "data-analytics" - ] + "tags": ["marketing", "google-workspace", "data-analytics"] }, { "type": "google_bigquery", @@ -4073,11 +3894,7 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "google-workspace", - "data-analytics" - ] + "tags": ["data-warehouse", "google-workspace", "data-analytics"] }, { "type": "google_books", @@ -4104,11 +3921,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "google-workspace", - "knowledge-base", - "content-management" - ] + "tags": ["google-workspace", "knowledge-base", "content-management"] }, { "type": "google_calendar_v2", @@ -4167,11 +3980,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "calendar", - "scheduling", - "google-workspace" - ] + "tags": ["calendar", "scheduling", "google-workspace"] }, { "type": "google_contacts", @@ -4214,11 +4023,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "google-workspace", - "customer-support", - "enrichment" - ] + "tags": ["google-workspace", "customer-support", "enrichment"] }, { "type": "google_docs", @@ -4249,11 +4054,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "google-workspace", - "document-processing", - "content-management" - ] + "tags": ["google-workspace", "document-processing", "content-management"] }, { "type": "google_drive", @@ -4328,11 +4129,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "google-workspace", - "document-processing" - ] + "tags": ["cloud", "google-workspace", "document-processing"] }, { "type": "google_forms", @@ -4393,11 +4190,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "google-workspace", - "forms", - "data-analytics" - ] + "tags": ["google-workspace", "forms", "data-analytics"] }, { "type": "google_groups", @@ -4480,11 +4273,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "google-workspace", - "messaging", - "identity" - ] + "tags": ["google-workspace", "messaging", "identity"] }, { "type": "google_maps", @@ -4555,10 +4344,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "google-workspace", - "enrichment" - ] + "tags": ["google-workspace", "enrichment"] }, { "type": "google_meet", @@ -4601,11 +4387,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "meeting", - "google-workspace", - "scheduling" - ] + "tags": ["meeting", "google-workspace", "scheduling"] }, { "type": "google_pagespeed", @@ -4623,11 +4405,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "google-workspace", - "seo", - "monitoring" - ] + "tags": ["google-workspace", "seo", "monitoring"] }, { "type": "google_search", @@ -4645,11 +4423,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "google-workspace", - "web-scraping", - "seo" - ] + "tags": ["google-workspace", "web-scraping", "seo"] }, { "type": "google_sheets_v2", @@ -4712,11 +4486,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "spreadsheet", - "google-workspace", - "data-analytics" - ] + "tags": ["spreadsheet", "google-workspace", "data-analytics"] }, { "type": "google_slides_v2", @@ -4791,11 +4561,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "google-workspace", - "document-processing", - "content-management" - ] + "tags": ["google-workspace", "document-processing", "content-management"] }, { "type": "google_tasks", @@ -4838,11 +4604,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "google-workspace", - "project-management", - "scheduling" - ] + "tags": ["google-workspace", "project-management", "scheduling"] }, { "type": "google_translate", @@ -4869,11 +4631,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "google-workspace", - "content-management", - "automation" - ] + "tags": ["google-workspace", "content-management", "automation"] }, { "type": "google_vault", @@ -4920,11 +4678,7 @@ "authType": "oauth", "category": "tools", "integrationType": "security", - "tags": [ - "google-workspace", - "secrets-management", - "document-processing" - ] + "tags": ["google-workspace", "secrets-management", "document-processing"] }, { "type": "grafana", @@ -5019,10 +4773,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "monitoring", - "data-analytics" - ] + "tags": ["monitoring", "data-analytics"] }, { "type": "grain", @@ -5118,10 +4869,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "meeting", - "note-taking" - ] + "tags": ["meeting", "note-taking"] }, { "type": "granola", @@ -5148,10 +4896,7 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": [ - "meeting", - "note-taking" - ] + "tags": ["meeting", "note-taking"] }, { "type": "greenhouse", @@ -5214,9 +4959,7 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring" - ] + "tags": ["hiring"] }, { "type": "greptile", @@ -5251,10 +4994,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "version-control", - "knowledge-base" - ] + "tags": ["version-control", "knowledge-base"] }, { "type": "hex", @@ -5337,10 +5077,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "hubspot", @@ -5566,11 +5303,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "marketing", - "sales-engagement", - "customer-support" - ] + "tags": ["marketing", "sales-engagement", "customer-support"] }, { "type": "huggingface", @@ -5588,10 +5321,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "agentic" - ] + "tags": ["llm", "agentic"] }, { "type": "hunter", @@ -5634,10 +5364,7 @@ "authType": "api-key", "category": "tools", "integrationType": "sales-intelligence", - "tags": [ - "enrichment", - "sales-engagement" - ] + "tags": ["enrichment", "sales-engagement"] }, { "type": "image_generator", @@ -5655,10 +5382,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "image-generation", - "llm" - ] + "tags": ["image-generation", "llm"] }, { "type": "imap", @@ -5682,10 +5406,7 @@ "authType": "none", "category": "triggers", "integrationType": "email", - "tags": [ - "messaging", - "automation" - ] + "tags": ["messaging", "automation"] }, { "type": "incidentio", @@ -5880,10 +5601,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "incident-management", - "monitoring" - ] + "tags": ["incident-management", "monitoring"] }, { "type": "infisical", @@ -5922,9 +5640,7 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": [ - "secrets-management" - ] + "tags": ["secrets-management"] }, { "type": "intercom_v2", @@ -6067,10 +5783,7 @@ "authType": "api-key", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "messaging" - ] + "tags": ["customer-support", "messaging"] }, { "type": "jina", @@ -6097,10 +5810,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "knowledge-base" - ] + "tags": ["web-scraping", "knowledge-base"] }, { "type": "jira", @@ -6246,10 +5956,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing" - ] + "tags": ["project-management", "ticketing"] }, { "type": "jira_service_management", @@ -6352,11 +6059,7 @@ "authType": "oauth", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "ticketing", - "incident-management" - ] + "tags": ["customer-support", "ticketing", "incident-management"] }, { "type": "kalshi_v2", @@ -6443,10 +6146,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "prediction-markets", - "data-analytics" - ] + "tags": ["prediction-markets", "data-analytics"] }, { "type": "ketch", @@ -6485,9 +6185,7 @@ "authType": "none", "category": "tools", "integrationType": "security", - "tags": [ - "identity" - ] + "tags": ["identity"] }, { "type": "knowledge", @@ -6587,11 +6285,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "monitoring", - "llm", - "data-analytics" - ] + "tags": ["monitoring", "llm", "data-analytics"] }, { "type": "lemlist", @@ -6668,11 +6362,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "sales-engagement", - "email-marketing", - "automation" - ] + "tags": ["sales-engagement", "email-marketing", "automation"] }, { "type": "linear", @@ -7079,10 +6769,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing" - ] + "tags": ["project-management", "ticketing"] }, { "type": "linkedin", @@ -7109,11 +6796,7 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": [ - "marketing", - "sales-engagement", - "enrichment" - ] + "tags": ["marketing", "sales-engagement", "enrichment"] }, { "type": "linkup", @@ -7131,10 +6814,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "enrichment" - ] + "tags": ["web-scraping", "enrichment"] }, { "type": "loops", @@ -7193,11 +6873,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "marketing", - "automation" - ] + "tags": ["email-marketing", "marketing", "automation"] }, { "type": "luma", @@ -7240,11 +6916,7 @@ "authType": "api-key", "category": "tools", "integrationType": "productivity", - "tags": [ - "events", - "calendar", - "scheduling" - ] + "tags": ["events", "calendar", "scheduling"] }, { "type": "mailchimp", @@ -7555,11 +7227,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "marketing", - "automation" - ] + "tags": ["email-marketing", "marketing", "automation"] }, { "type": "mailgun", @@ -7610,10 +7278,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "messaging", - "email-marketing" - ] + "tags": ["messaging", "email-marketing"] }, { "type": "mem0", @@ -7644,11 +7309,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "knowledge-base", - "agentic" - ] + "tags": ["llm", "knowledge-base", "agentic"] }, { "type": "memory", @@ -7768,11 +7429,7 @@ "authType": "oauth", "category": "tools", "integrationType": "databases", - "tags": [ - "microsoft-365", - "data-warehouse", - "cloud" - ] + "tags": ["microsoft-365", "data-warehouse", "cloud"] }, { "type": "microsoft_excel_v2", @@ -7799,10 +7456,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "spreadsheet", - "microsoft-365" - ] + "tags": ["spreadsheet", "microsoft-365"] }, { "type": "microsoft_planner", @@ -7873,11 +7527,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "microsoft-365", - "ticketing" - ] + "tags": ["project-management", "microsoft-365", "ticketing"] }, { "type": "microsoft_teams", @@ -7958,10 +7608,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "microsoft-365" - ] + "tags": ["messaging", "microsoft-365"] }, { "type": "mistral_parse_v3", @@ -7979,10 +7626,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr" - ] + "tags": ["document-processing", "ocr"] }, { "type": "mongodb", @@ -8025,10 +7669,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "cloud" - ] + "tags": ["data-warehouse", "cloud"] }, { "type": "mysql", @@ -8071,10 +7712,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "neo4j", @@ -8121,10 +7759,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "notion_v2", @@ -8142,11 +7777,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "note-taking", - "knowledge-base", - "content-management" - ] + "tags": ["note-taking", "knowledge-base", "content-management"] }, { "type": "obsidian", @@ -8225,10 +7856,7 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": [ - "note-taking", - "knowledge-base" - ] + "tags": ["note-taking", "knowledge-base"] }, { "type": "okta", @@ -8319,10 +7947,7 @@ "authType": "api-key", "category": "tools", "integrationType": "security", - "tags": [ - "identity", - "automation" - ] + "tags": ["identity", "automation"] }, { "type": "onedrive", @@ -8365,11 +7990,7 @@ "authType": "oauth", "category": "tools", "integrationType": "file-storage", - "tags": [ - "microsoft-365", - "cloud", - "document-processing" - ] + "tags": ["microsoft-365", "cloud", "document-processing"] }, { "type": "outlook", @@ -8424,11 +8045,7 @@ "authType": "oauth", "category": "tools", "integrationType": "email", - "tags": [ - "microsoft-365", - "messaging", - "automation" - ] + "tags": ["microsoft-365", "messaging", "automation"] }, { "type": "pagerduty", @@ -8471,10 +8088,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "incident-management", - "monitoring" - ] + "tags": ["incident-management", "monitoring"] }, { "type": "parallel_ai", @@ -8505,11 +8119,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "llm", - "agentic" - ] + "tags": ["web-scraping", "llm", "agentic"] }, { "type": "perplexity", @@ -8536,11 +8146,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "web-scraping", - "agentic" - ] + "tags": ["llm", "web-scraping", "agentic"] }, { "type": "pinecone", @@ -8579,10 +8185,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "pipedrive", @@ -8673,10 +8276,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "project-management" - ] + "tags": ["sales-engagement", "project-management"] }, { "type": "polymarket", @@ -8775,10 +8375,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "prediction-markets", - "data-analytics" - ] + "tags": ["prediction-markets", "data-analytics"] }, { "type": "postgresql", @@ -8821,10 +8418,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "posthog", @@ -9015,10 +8609,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-analytics", - "monitoring" - ] + "tags": ["data-analytics", "monitoring"] }, { "type": "profound", @@ -9133,10 +8724,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "seo", - "data-analytics" - ] + "tags": ["seo", "data-analytics"] }, { "type": "pulse_v2", @@ -9154,10 +8742,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr" - ] + "tags": ["document-processing", "ocr"] }, { "type": "qdrant", @@ -9188,10 +8773,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "vector-search", - "knowledge-base" - ] + "tags": ["vector-search", "knowledge-base"] }, { "type": "quiver", @@ -9222,9 +8804,7 @@ "authType": "api-key", "category": "tools", "integrationType": "design", - "tags": [ - "image-generation" - ] + "tags": ["image-generation"] }, { "type": "reddit", @@ -9311,10 +8891,7 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": [ - "content-management", - "web-scraping" - ] + "tags": ["content-management", "web-scraping"] }, { "type": "redis", @@ -9421,10 +8998,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "reducto_v2", @@ -9442,10 +9016,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "ocr" - ] + "tags": ["document-processing", "ocr"] }, { "type": "resend", @@ -9496,10 +9067,7 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "messaging" - ] + "tags": ["email-marketing", "messaging"] }, { "type": "revenuecat", @@ -9558,10 +9126,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": [ - "payments", - "subscriptions" - ] + "tags": ["payments", "subscriptions"] }, { "type": "rippling", @@ -9656,9 +9221,7 @@ "authType": "api-key", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring" - ] + "tags": ["hiring"] }, { "type": "s3", @@ -9697,10 +9260,7 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "salesforce", @@ -9859,10 +9419,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "customer-support" - ] + "tags": ["sales-engagement", "customer-support"] }, { "type": "search", @@ -9880,10 +9437,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "seo" - ] + "tags": ["web-scraping", "seo"] }, { "type": "sendgrid", @@ -9966,10 +9520,7 @@ "authType": "api-key", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "messaging" - ] + "tags": ["email-marketing", "messaging"] }, { "type": "sentry", @@ -10036,10 +9587,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "error-tracking", - "monitoring" - ] + "tags": ["error-tracking", "monitoring"] }, { "type": "serper", @@ -10057,10 +9605,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "seo" - ] + "tags": ["web-scraping", "seo"] }, { "type": "servicenow", @@ -10095,11 +9640,7 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "ticketing", - "incident-management" - ] + "tags": ["customer-support", "ticketing", "incident-management"] }, { "type": "sftp", @@ -10142,10 +9683,7 @@ "authType": "none", "category": "tools", "integrationType": "file-storage", - "tags": [ - "cloud", - "automation" - ] + "tags": ["cloud", "automation"] }, { "type": "sharepoint", @@ -10196,11 +9734,7 @@ "authType": "oauth", "category": "tools", "integrationType": "documents", - "tags": [ - "microsoft-365", - "content-management", - "document-processing" - ] + "tags": ["microsoft-365", "content-management", "document-processing"] }, { "type": "shopify", @@ -10303,10 +9837,7 @@ "authType": "oauth", "category": "tools", "integrationType": "ecommerce", - "tags": [ - "payments", - "subscriptions" - ] + "tags": ["payments", "subscriptions"] }, { "type": "similarweb", @@ -10345,11 +9876,7 @@ "authType": "api-key", "category": "tools", "integrationType": "analytics", - "tags": [ - "marketing", - "data-analytics", - "seo" - ] + "tags": ["marketing", "data-analytics", "seo"] }, { "type": "slack", @@ -10474,11 +10001,7 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "webhooks", - "automation" - ] + "tags": ["messaging", "webhooks", "automation"] }, { "type": "smtp", @@ -10496,10 +10019,7 @@ "authType": "none", "category": "tools", "integrationType": "email", - "tags": [ - "email-marketing", - "messaging" - ] + "tags": ["email-marketing", "messaging"] }, { "type": "stt_v2", @@ -10517,10 +10037,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "speech-to-text", - "document-processing" - ] + "tags": ["speech-to-text", "document-processing"] }, { "type": "ssh", @@ -10591,10 +10108,7 @@ "authType": "none", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "automation" - ] + "tags": ["cloud", "automation"] }, { "type": "stagehand", @@ -10621,11 +10135,7 @@ "authType": "api-key", "category": "tools", "integrationType": "automation", - "tags": [ - "web-scraping", - "automation", - "agentic" - ] + "tags": ["web-scraping", "automation", "agentic"] }, { "type": "stripe", @@ -10850,11 +10360,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ecommerce", - "tags": [ - "payments", - "subscriptions", - "webhooks" - ] + "tags": ["payments", "subscriptions", "webhooks"] }, { "type": "supabase", @@ -10961,11 +10467,7 @@ "authType": "api-key", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse", - "vector-search" - ] + "tags": ["cloud", "data-warehouse", "vector-search"] }, { "type": "tavily", @@ -11000,10 +10502,7 @@ "authType": "api-key", "category": "tools", "integrationType": "search", - "tags": [ - "web-scraping", - "enrichment" - ] + "tags": ["web-scraping", "enrichment"] }, { "type": "telegram", @@ -11056,11 +10555,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "webhooks", - "automation" - ] + "tags": ["messaging", "webhooks", "automation"] }, { "type": "tts", @@ -11078,10 +10573,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "text-to-speech", - "llm" - ] + "tags": ["text-to-speech", "llm"] }, { "type": "tinybird", @@ -11108,10 +10600,7 @@ "authType": "none", "category": "tools", "integrationType": "analytics", - "tags": [ - "data-warehouse", - "data-analytics" - ] + "tags": ["data-warehouse", "data-analytics"] }, { "type": "translate", @@ -11129,10 +10618,7 @@ "authType": "none", "category": "tools", "integrationType": "ai", - "tags": [ - "document-processing", - "llm" - ] + "tags": ["document-processing", "llm"] }, { "type": "trello", @@ -11175,10 +10661,7 @@ "authType": "oauth", "category": "tools", "integrationType": "productivity", - "tags": [ - "project-management", - "ticketing" - ] + "tags": ["project-management", "ticketing"] }, { "type": "twilio_sms", @@ -11196,10 +10679,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "automation" - ] + "tags": ["messaging", "automation"] }, { "type": "twilio_voice", @@ -11236,10 +10716,7 @@ "authType": "none", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "text-to-speech" - ] + "tags": ["messaging", "text-to-speech"] }, { "type": "typeform", @@ -11296,10 +10773,7 @@ "authType": "api-key", "category": "tools", "integrationType": "documents", - "tags": [ - "forms", - "data-analytics" - ] + "tags": ["forms", "data-analytics"] }, { "type": "upstash", @@ -11382,10 +10856,7 @@ "authType": "none", "category": "tools", "integrationType": "databases", - "tags": [ - "cloud", - "data-warehouse" - ] + "tags": ["cloud", "data-warehouse"] }, { "type": "vercel", @@ -11604,10 +11075,7 @@ "authType": "api-key", "category": "tools", "integrationType": "developer-tools", - "tags": [ - "cloud", - "ci-cd" - ] + "tags": ["cloud", "ci-cd"] }, { "type": "video_generator_v2", @@ -11625,10 +11093,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "video-generation", - "llm" - ] + "tags": ["video-generation", "llm"] }, { "type": "vision_v2", @@ -11646,11 +11111,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "document-processing", - "ocr" - ] + "tags": ["llm", "document-processing", "ocr"] }, { "type": "wealthbox", @@ -11693,10 +11154,7 @@ "authType": "oauth", "category": "tools", "integrationType": "crm", - "tags": [ - "sales-engagement", - "customer-support" - ] + "tags": ["sales-engagement", "customer-support"] }, { "type": "webflow", @@ -11756,10 +11214,7 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": [ - "content-management", - "seo" - ] + "tags": ["content-management", "seo"] }, { "type": "whatsapp", @@ -11783,10 +11238,7 @@ "authType": "api-key", "category": "tools", "integrationType": "communication", - "tags": [ - "messaging", - "automation" - ] + "tags": ["messaging", "automation"] }, { "type": "wikipedia", @@ -11821,10 +11273,7 @@ "authType": "none", "category": "tools", "integrationType": "search", - "tags": [ - "knowledge-base", - "web-scraping" - ] + "tags": ["knowledge-base", "web-scraping"] }, { "type": "wordpress", @@ -11947,10 +11396,7 @@ "authType": "oauth", "category": "tools", "integrationType": "design", - "tags": [ - "content-management", - "seo" - ] + "tags": ["content-management", "seo"] }, { "type": "workday", @@ -12009,10 +11455,7 @@ "authType": "none", "category": "tools", "integrationType": "hr", - "tags": [ - "hiring", - "project-management" - ] + "tags": ["hiring", "project-management"] }, { "type": "x", @@ -12143,10 +11586,7 @@ "authType": "oauth", "category": "tools", "integrationType": "social", - "tags": [ - "marketing", - "messaging" - ] + "tags": ["marketing", "messaging"] }, { "type": "youtube", @@ -12201,11 +11641,7 @@ "authType": "api-key", "category": "tools", "integrationType": "media", - "tags": [ - "google-workspace", - "marketing", - "content-management" - ] + "tags": ["google-workspace", "marketing", "content-management"] }, { "type": "zendesk", @@ -12328,10 +11764,7 @@ "authType": "none", "category": "tools", "integrationType": "customer-support", - "tags": [ - "customer-support", - "ticketing" - ] + "tags": ["customer-support", "ticketing"] }, { "type": "zep", @@ -12386,11 +11819,7 @@ "authType": "api-key", "category": "tools", "integrationType": "ai", - "tags": [ - "llm", - "knowledge-base", - "agentic" - ] + "tags": ["llm", "knowledge-base", "agentic"] }, { "type": "zoom", @@ -12449,10 +11878,6 @@ "authType": "oauth", "category": "tools", "integrationType": "communication", - "tags": [ - "meeting", - "calendar", - "scheduling" - ] + "tags": ["meeting", "calendar", "scheduling"] } -] \ No newline at end of file +] diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 1fb35cf96fd..13a1c509dfa 100755 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -679,7 +679,16 @@ async function writeIntegrationsJson(iconMapping: Record): Promi integrations.sort((a, b) => a.name.localeCompare(b.name)) const jsonPath = path.join(LANDING_INTEGRATIONS_DATA_PATH, 'integrations.json') - fs.writeFileSync(jsonPath, JSON.stringify(integrations, null, 2)) + // JSON.stringify always expands arrays across multiple lines. Biome's formatter + // collapses short arrays of primitives onto single lines. Post-process to match. + const json = JSON.stringify(integrations, null, 2).replace( + /\[\n(\s+"[^"\n]*"(?:,\n\s+"[^"\n]*")*)\n\s+\]/g, + (_match, inner) => { + const items = (inner as string).split(',\n').map((s: string) => s.trim()) + return `[${items.join(', ')}]` + } + ) + fs.writeFileSync(jsonPath, `${json}\n`) console.log(`✓ Integration data written: ${integrations.length} integrations → ${jsonPath}`) } catch (error) { console.error('Error writing integrations JSON:', error) @@ -2828,7 +2837,7 @@ function updateMetaJson() { pages: items, } - fs.writeFileSync(metaJsonPath, JSON.stringify(metaJson, null, 2)) + fs.writeFileSync(metaJsonPath, `${JSON.stringify(metaJson, null, 2)}\n`) console.log(`Updated meta.json with ${items.length} entries`) }