diff --git a/apps/docs/app/developer-docs/integrations/activepieces/configure-connection.webp b/apps/docs/app/developer-docs/integrations/activepieces/configure-connection.webp
new file mode 100644
index 0000000000..cd0daa6e95
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/configure-connection.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/create-connection.webp b/apps/docs/app/developer-docs/integrations/activepieces/create-connection.webp
new file mode 100644
index 0000000000..eec50e6364
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/create-connection.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/create-new-flow.webp b/apps/docs/app/developer-docs/integrations/activepieces/create-new-flow.webp
new file mode 100644
index 0000000000..ec1efff3da
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/create-new-flow.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/duplicate-survey.webp b/apps/docs/app/developer-docs/integrations/activepieces/duplicate-survey.webp
new file mode 100644
index 0000000000..842612ca8b
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/duplicate-survey.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/match-data.webp b/apps/docs/app/developer-docs/integrations/activepieces/match-data.webp
new file mode 100644
index 0000000000..db12224e5c
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/match-data.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/page.mdx b/apps/docs/app/developer-docs/integrations/activepieces/page.mdx
new file mode 100644
index 0000000000..503ad2c749
--- /dev/null
+++ b/apps/docs/app/developer-docs/integrations/activepieces/page.mdx
@@ -0,0 +1,155 @@
+import { MdxImage } from "@/components/mdx-image";
+
+import CreateConnection from "./create-connection.webp";
+import CreateNewFlow from "./create-new-flow.webp";
+import DuplicateSurvey from "./duplicate-survey.webp";
+import ConfigureConnection from "./configure-connection.webp";
+import SearchFormbricks from "./search-formbricks.webp";
+import SelectSurvey from "./select-survey.webp";
+import TestTrigger from "./test-trigger.webp";
+import UpdateQuestionId from "./update-question-id.webp";
+import SuccessResponse from "./success-response.webp";
+import SelectGSSheet from "./select-gs-sheet.webp";
+import SelectGoogleSheet from "./select-google-sheet.webp";
+import MatchData from "./match-data.webp";
+import Result from "./result.webp";
+
+export const metadata = {
+ title: "Formbricks Integration with Activepieces: A Step-by-Step Guide",
+ description:
+ "Learn how to integrate Formbricks with Activepieces. Follow our detailed guide to set up workflows, connect with various apps, and send your survey data to multiple platforms.",
+};
+
+#### Integrations
+
+# Activepieces Setup
+
+Activepieces is a versatile tool to automate workflows between Formbricks and numerous applications. Here's how to set it up.
+
+
+ Ensure your survey is finalized before setting up Activepieces. Any changes in the survey will require additional adjustments in the workflow.
+
+
+## Step 1: Setup your survey incl. `questionId` for every question
+
+Set up the `questionId`s of your survey questions before publishing.
+
+
+
+_Update the Question ID field in every question card under Advanced Settings._
+
+
+ Already published? Duplicate survey You can only update the questionId before publishing the survey. If already published, simply duplicate it.
+
+
+
+## Step 2: Setup Activepieces
+
+Visit [Activepieces](https://activepieces.com) to start a new Flow.
+
+
+
+Search for `Formbricks` and choose the event to trigger the flow, we will choose `Response Finished` here
+
+
+
+## Step 3: Connect Formbricks with Activepieces
+
+Click on `Create connection`:
+
+
+
+Enter the Formbricks API Host and API Key. API Host is by default set to https://app.formbricks.com but can be modified for self-hosting instances. Learn how to get an API Key from the [API Key tutorial](/additional-features/api#how-to-generate-an-api-key).
+
+
+
+## Step 4: Select Survey
+
+Choose from your created surveys:
+
+
+
+## Step 5: Send a test response
+
+You need a test response for Activepieces setup. Click on Test trigger and submit a test response in the connected Formbricks survey to see the data in Activepieces.
+
+
+
+If the test response is successful, you will see the data in Activepieces.
+
+
+
+## Step 6: Set up Google Sheet
+
+Decide on the desired action for the data. Here, we'll send submissions to a Google Sheet. Add Google sheet step to your flow and configure it as follows:
+Choose "Add a Row" for the action. Authenticate with Google and select the spreadsheet you want to add the data to.
+
+
+
+Specify the fields you want to add to the spreadsheet.
+
+
+
+A new row gets added to the spreadsheet for every response:
+
+
\ No newline at end of file
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/result.webp b/apps/docs/app/developer-docs/integrations/activepieces/result.webp
new file mode 100644
index 0000000000..5fa6cac881
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/result.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/search-formbricks.webp b/apps/docs/app/developer-docs/integrations/activepieces/search-formbricks.webp
new file mode 100644
index 0000000000..5a804f56c2
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/search-formbricks.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/select-google-sheet.webp b/apps/docs/app/developer-docs/integrations/activepieces/select-google-sheet.webp
new file mode 100644
index 0000000000..824e560839
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/select-google-sheet.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/select-gs-sheet.webp b/apps/docs/app/developer-docs/integrations/activepieces/select-gs-sheet.webp
new file mode 100644
index 0000000000..2b34521238
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/select-gs-sheet.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/select-survey.webp b/apps/docs/app/developer-docs/integrations/activepieces/select-survey.webp
new file mode 100644
index 0000000000..9547653fdf
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/select-survey.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/success-response.webp b/apps/docs/app/developer-docs/integrations/activepieces/success-response.webp
new file mode 100644
index 0000000000..dc790dc4fc
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/success-response.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/test-trigger.webp b/apps/docs/app/developer-docs/integrations/activepieces/test-trigger.webp
new file mode 100644
index 0000000000..e6756823da
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/test-trigger.webp differ
diff --git a/apps/docs/app/developer-docs/integrations/activepieces/update-question-id.webp b/apps/docs/app/developer-docs/integrations/activepieces/update-question-id.webp
new file mode 100644
index 0000000000..b1db9d6140
Binary files /dev/null and b/apps/docs/app/developer-docs/integrations/activepieces/update-question-id.webp differ
diff --git a/apps/docs/lib/navigation.ts b/apps/docs/lib/navigation.ts
index 75f56c3e4a..08aab684d5 100644
--- a/apps/docs/lib/navigation.ts
+++ b/apps/docs/lib/navigation.ts
@@ -120,6 +120,7 @@ export const navigation: NavGroup[] = [
{ title: "Airtable", href: "/developer-docs/integrations/airtable" },
{ title: "Google Sheets", href: "/developer-docs/integrations/google-sheets" },
{ title: "Make", href: "/developer-docs/integrations/make" },
+ { title: "Activepieces", href: "/developer-docs/integrations/activepieces" },
{ title: "n8n", href: "/developer-docs/integrations/n8n" },
{ title: "Notion", href: "/developer-docs/integrations/notion" },
{ title: "Slack", href: "/developer-docs/integrations/slack" },
diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx
index 52598676e9..0ed77a6de8 100644
--- a/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/integrations/page.tsx
@@ -1,4 +1,5 @@
import { getWebhookCountBySource } from "@/app/(app)/environments/[environmentId]/integrations/lib/webhook";
+import ActivePiecesLogo from "@/images/activepieces.webp";
import AirtableLogo from "@/images/airtableLogo.svg";
import GoogleSheetsLogo from "@/images/googleSheetsLogo.png";
import JsLogo from "@/images/jslogo.png";
@@ -38,6 +39,7 @@ const Page = async (props) => {
zapierWebhookCount,
makeWebhookCount,
n8nwebhookCount,
+ activePiecesWebhookCount,
] = await Promise.all([
getEnvironment(environmentId),
getIntegrations(environmentId),
@@ -47,6 +49,7 @@ const Page = async (props) => {
getWebhookCountBySource(environmentId, "zapier"),
getWebhookCountBySource(environmentId, "make"),
getWebhookCountBySource(environmentId, "n8n"),
+ getWebhookCountBySource(environmentId, "activepieces"),
]);
const isIntegrationConnected = (type: TIntegrationType) =>
@@ -216,6 +219,25 @@ const Page = async (props) => {
statusText: isNotionIntegrationConnected ? t("common.connected") : t("common.not_connected"),
disabled: isReadOnly,
},
+ {
+ docsHref: "https://formbricks.com/docs/integrations/activepieces",
+ docsText: t("common.docs"),
+ docsNewTab: true,
+ connectHref: "https://www.activepieces.com/pieces/formbricks",
+ connectText: t("common.connect"),
+ connectNewTab: true,
+ label: "Activepieces",
+ description: t("environments.integrations.activepieces_integration_description"),
+ icon: ,
+ connected: activePiecesWebhookCount > 0,
+ statusText:
+ activePiecesWebhookCount === 1
+ ? `1 ${t("common.integration")}`
+ : activePiecesWebhookCount === 0
+ ? t("common.not_connected")
+ : `${activePiecesWebhookCount} ${t("common.integrations")}`,
+ disabled: isReadOnly,
+ },
];
integrationCards.unshift({
diff --git a/apps/web/images/activepieces.webp b/apps/web/images/activepieces.webp
new file mode 100644
index 0000000000..7f0d2c020e
Binary files /dev/null and b/apps/web/images/activepieces.webp differ
diff --git a/packages/database/migration/20250206093504_add_activepieces_to_webhook_source/migration.sql b/packages/database/migration/20250206093504_add_activepieces_to_webhook_source/migration.sql
new file mode 100644
index 0000000000..026ea2fb84
--- /dev/null
+++ b/packages/database/migration/20250206093504_add_activepieces_to_webhook_source/migration.sql
@@ -0,0 +1,2 @@
+-- AlterEnum
+ALTER TYPE "WebhookSource" ADD VALUE 'activepieces';
diff --git a/packages/database/schema.prisma b/packages/database/schema.prisma
index db35503728..f8ab8f4e16 100644
--- a/packages/database/schema.prisma
+++ b/packages/database/schema.prisma
@@ -31,6 +31,7 @@ enum WebhookSource {
zapier
make
n8n
+ activepieces
}
model Webhook {
diff --git a/packages/lib/messages/de-DE.json b/packages/lib/messages/de-DE.json
index 87abee8bbb..7ff606c221 100644
--- a/packages/lib/messages/de-DE.json
+++ b/packages/lib/messages/de-DE.json
@@ -691,6 +691,7 @@
},
"formbricks_logo": "Formbricks-Logo",
"integrations": {
+ "activepieces_integration_description": "Stelle deine Umfragen sofort mit Activepieces in Verbindung",
"additional_settings": "Weitere Einstellungen",
"airtable": {
"airtable_base": "Airtable Basis",
diff --git a/packages/lib/messages/en-US.json b/packages/lib/messages/en-US.json
index 67a95ef285..64c5ebb7a7 100644
--- a/packages/lib/messages/en-US.json
+++ b/packages/lib/messages/en-US.json
@@ -691,6 +691,7 @@
},
"formbricks_logo": "Formbricks Logo",
"integrations": {
+ "activepieces_integration_description": "Instantly connect Formbricks with popular apps to automate tasks without coding.",
"additional_settings": "Additional Settings",
"airtable": {
"airtable_base": "Airtable base",
diff --git a/packages/lib/messages/fr-FR.json b/packages/lib/messages/fr-FR.json
index 1bd689ee22..ad7be8c2e6 100644
--- a/packages/lib/messages/fr-FR.json
+++ b/packages/lib/messages/fr-FR.json
@@ -691,6 +691,7 @@
},
"formbricks_logo": "Logo Formbricks",
"integrations": {
+ "activepieces_integration_description": "Connectez Formbricks à des applications populaires pour automatiser des tâches sans code.",
"additional_settings": "Paramètres supplémentaires",
"airtable": {
"airtable_base": "Base Airtable",
diff --git a/packages/lib/messages/pt-BR.json b/packages/lib/messages/pt-BR.json
index 2b90124cbf..4f33f7c7c1 100644
--- a/packages/lib/messages/pt-BR.json
+++ b/packages/lib/messages/pt-BR.json
@@ -691,6 +691,7 @@
},
"formbricks_logo": "Logo da Formbricks",
"integrations": {
+ "activepieces_integration_description": "Conecte o Formbricks com aplicativos populares para automatizar tarefas sem codificar.",
"additional_settings": "Configurações Adicionais",
"airtable": {
"airtable_base": "base do Airtable",