Skip to main content
RapidDev - Software Development Agency
bubble-integrationsBubble API Connector

Marketo

Connect Bubble to Marketo (Adobe Marketo Engage) using the API Connector with OAuth2 client credentials. Because every Marketo instance has a unique Munchkin URL, you must complete three admin steps in Marketo before any API call can be made: create an API-only user, assign a permission role, and register a LaunchPoint custom service. Store the short-lived access token in a Bubble Data Type and refresh it automatically in a Backend Workflow before each data call.

What you'll learn

  • How to complete the three Marketo admin prerequisites: API-only user, permission role, and LaunchPoint custom service
  • How to locate your unique Munchkin ID and form your instance base URL
  • How to configure two API Connector entries — one for token acquisition, one for REST data calls
  • How to build a reusable Backend Workflow that checks token expiry and refreshes automatically
  • How to create and sync Marketo leads from Bubble's User Data Type
  • How to query Marketo leads by email, push leads to smart campaigns, and page through large result sets
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Advanced20 min read3–5 hoursMarketingLast updated July 2026RapidDev Engineering Team
TL;DR

Connect Bubble to Marketo (Adobe Marketo Engage) using the API Connector with OAuth2 client credentials. Because every Marketo instance has a unique Munchkin URL, you must complete three admin steps in Marketo before any API call can be made: create an API-only user, assign a permission role, and register a LaunchPoint custom service. Store the short-lived access token in a Bubble Data Type and refresh it automatically in a Backend Workflow before each data call.

Quick facts about this guide
FactValue
ToolMarketo
CategoryMarketing
MethodBubble API Connector
DifficultyAdvanced
Time required3–5 hours
Last updatedJuly 2026

Why Marketo Requires a Different Approach Than Most Integrations

Most marketing tool integrations in Bubble follow a simple pattern: get an API key, put it in a Private header, make calls. Marketo requires significantly more setup because it is an enterprise platform designed for large organizations with strict access controls. Before you make your first API call, a Marketo administrator must complete three distinct steps inside the Marketo admin panel: create a dedicated API-only user account, assign that user a custom permission role, and register a LaunchPoint custom service that generates the client credentials you will actually use in Bubble.

On top of that, every Marketo customer has a completely unique instance URL based on their Munchkin ID — there is no universal base URL like 'api.marketo.com'. You must find your specific Munchkin ID (Admin → Integration → Munchkin) and construct your URLs as 'https://[MUNCHKIN_ID].mktorest.com'.

Once authentication is set up, the integration is powerful. Marketo's REST API gives you full access to lead records, smart campaign execution, activity history, and custom object data. The typical Bubble use case is an internal operations tool: sync Bubble's user database into Marketo as leads, look up lead scores and engagement data, or trigger smart campaign enrollment based on actions the user takes inside the Bubble app.

The daily API limit is 50,000 calls per Marketo instance — shared across every integration that instance uses. In enterprise environments, the Marketo team may already be consuming a significant portion of this with Salesforce sync and other native connectors. Always coordinate with your Marketo administrator before building a high-volume integration.

Integration method

Bubble API Connector

Two API Connector entries: one to fetch the OAuth2 access token from Marketo's identity endpoint, and one for all REST data calls using the stored token in a Bearer header.

Prerequisites

  • Active Marketo Engage subscription (enterprise pricing, typically $1,000+/mo per instance — no free tier)
  • Marketo administrator access to complete the three admin setup steps (API-only user, role, LaunchPoint service)
  • Your Marketo Munchkin ID (Admin → Integration → Munchkin in the Marketo admin panel)
  • Bubble app on a paid plan (Starter $32/mo or above) — Backend Workflows required for server-side token management are not available on Bubble's Free plan
  • Bubble API Connector plugin installed (Plugins → Add plugins → search 'API Connector' → Install)

Step-by-step guide

1

Complete the Three Marketo Admin Prerequisites

Before touching Bubble, a Marketo administrator must complete three steps inside the Marketo admin panel. Skip any one of these and every API call will return a 401 or 403 error with no useful explanation. Step A — Create a permission role: In Marketo, go to Admin → Security → Roles → New Role. Name it 'Bubble API Role'. Under permissions, enable at minimum: Access API (required for all REST calls), Read-Write Lead (to create and update lead records), Read-Only Campaign (to query smart campaigns), and Read-Only Assets (to list emails and programs). Grant only the minimum permissions your Bubble app actually needs. Step B — Create an API-only user: Go to Admin → Security → Users & Roles → Invite User. Use a service account email address (e.g., bubble-integration@yourcompany.com) and check the 'API Only' checkbox — this prevents the account from being used for interactive login, which is the correct security practice for system integrations. Assign the Bubble API Role you just created. Step C — Register a LaunchPoint service: Go to Admin → Integration → LaunchPoint → New → New Service. Set Display Name to 'Bubble Integration', Service to 'Custom', and assign the API-Only user created in Step B. Click Create. Then click 'View Details' for the new service — you will see the Client ID and Client Secret. Copy both immediately and store them securely. While they can be viewed again later, having them on hand now saves you from navigating back through the admin panel.

Pro tip: Copy the Client ID and Client Secret from the 'View Details' dialog right after creating the LaunchPoint service. Store them in a password manager before moving to Bubble setup.

Expected result: You have a Client ID (format: a string of hex characters), a Client Secret (longer hex string), and your Munchkin ID (format: AAA-BBB-123, visible in Admin → Integration → Munchkin). You now have all three pieces of information needed for Bubble configuration.

2

Set Up App Constants and Install the API Connector

Your Marketo instance URL is unique to your account — it is not a constant you can hardcode in the documentation, it must be your specific Munchkin URL. Before building any API Connector calls, save this URL as a Bubble App Constant so that if it ever needs to change, you update it in one place rather than editing every API call. In Bubble, go to Settings → App Constants → Add a constant. Set Name to 'MARKETO_BASE_URL' and Value to 'https://YOUR_MUNCHKIN_ID.mktorest.com' (replace YOUR_MUNCHKIN_ID with the three-segment ID you copied from Marketo, e.g., 'https://AAA-BBB-123.mktorest.com'). Do not include a trailing slash. Next, go to Plugins → Add plugins. Search for 'API Connector' and install the one by Bubble (it is the official plugin, published by Bubble itself). After installation it appears in your Plugins list as 'API Connector'. Also create a Bubble Data Type to store the OAuth token. Go to Data → Data Types → Create a new type → name it 'Marketo_Token'. Add two fields: 'token' (type Text) and 'expires_at' (type Date). This Data Type will hold exactly one row — the current valid access token and when it expires. You will check and refresh this row before every Marketo API call.

Pro tip: Also create a 'Marketo_Lead' Data Type now with fields: id (number), email (text), first_name (text), last_name (text), company (text), lead_score (number), synced_at (date). You will populate this from Marketo API responses in later steps.

Expected result: App Constant MARKETO_BASE_URL is saved with your instance URL. The API Connector plugin is installed and visible in the Plugins tab. The Marketo_Token and Marketo_Lead Data Types are created in your Data tab.

3

Configure the Two API Connector Entries

Marketo authentication requires two separate API Connector entries — one to fetch the access token, and one for the actual data calls. Click Plugins → API Connector → Add another API. Name this first entry 'Marketo Auth'. - Set Authentication to 'None' (you handle auth manually via query params). - Click 'Add call'. Name it 'Get Token'. - Method: GET - URL: https://YOUR_MUNCHKIN_ID.mktorest.com/identity/oauth/token - Under Params, add three parameters: - grant_type | Value: client_credentials | Private: unchecked (not sensitive) - client_id | Value: [your Client ID] | Private: CHECKED - client_secret | Value: [your Client Secret] | Private: CHECKED - Set 'Use as' to Action. - Click Initialize call. If credentials are correct, Marketo returns JSON containing 'access_token' and 'expires_in' (3600). Bubble detects these fields automatically. Now add a second API entry. Click 'Add another API'. Name it 'Marketo API'. - Under Shared Headers, add: Key: Authorization | Value: Bearer [dynamic_token] — leave [dynamic_token] as a placeholder with angle brackets, which tells Bubble this value will be supplied at runtime from the stored token. - Set Private: unchecked on this header (the Bearer token itself is a short-lived runtime value; the credentials that generate it are already Private in the Auth entry above). - Add individual calls as needed, such as a GET call named 'Get Lead by Email' pointing to /rest/v1/leads.json with query param filterType=email and filterValues=[email_address], and a POST call named 'Upsert Lead' pointing to /rest/v1/leads.json.

marketo_api_connector_config.json
1// Marketo Auth — Get Token call configuration
2{
3 "method": "GET",
4 "url": "https://AAA-BBB-123.mktorest.com/identity/oauth/token",
5 "params": {
6 "grant_type": "client_credentials",
7 "client_id": "<private>",
8 "client_secret": "<private>"
9 }
10}
11
12// Expected successful response
13{
14 "access_token": "abcdef123456...",
15 "token_type": "bearer",
16 "expires_in": 3599,
17 "scope": "bubble-integration@yourcompany.com"
18}
19
20// Marketo API — Upsert Lead call configuration
21{
22 "method": "POST",
23 "url": "https://AAA-BBB-123.mktorest.com/rest/v1/leads.json",
24 "headers": {
25 "Authorization": "Bearer <dynamic_token>",
26 "Content-Type": "application/json"
27 },
28 "body": {
29 "action": "createOrUpdate",
30 "lookupField": "email",
31 "input": [
32 {
33 "email": "<lead_email>",
34 "firstName": "<first_name>",
35 "lastName": "<last_name>",
36 "company": "<company>"
37 }
38 ]
39 }
40}

Pro tip: When initializing the 'Upsert Lead' POST call, use a real test email address that already exists as a lead in your Marketo instance. The initialize call must return a successful non-error response for Bubble to detect the response field types correctly.

Expected result: The 'Marketo Auth' entry returns a valid access_token on initialization. The 'Marketo API' entry has the Bearer header configured with the dynamic token placeholder. Both entries appear in your API Connector plugin list.

4

Build the Token Refresh Backend Workflow

Access tokens expire after 3,600 seconds (one hour). Marketo enterprise workflows may run infrequently enough that a stale token is the normal state when an operation begins. You must build a reusable Backend Workflow that checks whether the stored token is still valid and fetches a new one if not. In Bubble, go to Backend Workflows (found in the main editor sidebar below the regular Workflows section — only visible on paid plans). Click 'New API workflow' and name it 'Refresh_Marketo_Token'. The workflow should contain these steps: 1. Add a Condition step: check if Marketo_Token's expires_at < Current date/time + 60 seconds (the 60-second buffer catches edge cases where the token expires mid-workflow). 2. Under the 'yes' branch of that condition, add a step: Call the 'Marketo Auth → Get Token' API Connector action. 3. Next step: Create or modify a thing — if a Marketo_Token record already exists, update it; if not, create one. Set token = result of Get Token's access_token, and expires_at = Current date/time + 3500 seconds (a 100-second safety buffer before actual expiry). To prepend this workflow to any Marketo data call, in your main Workflows add the step 'Schedule API workflow → Refresh_Marketo_Token' at the beginning, wait for completion, then read the stored token from the Marketo_Token Data Type and pass it as the dynamic_token parameter to your Marketo API calls. Note: Backend Workflows require a paid Bubble plan (Starter at $32/mo or above). If you are on Bubble's Free plan, you cannot reliably manage this OAuth token flow server-side. Upgrade before attempting this integration — it is not optional for Marketo.

token_refresh_workflow_logic.txt
1// Logic flow for Refresh_Marketo_Token Backend Workflow
2//
3// Step 1: Condition
4// IF: Marketo_Token's expires_at < (Current date/time + :60seconds)
5// -- token is expired or about to expire
6// THEN proceed to step 2
7// ELSE: skip to end (current token still valid)
8//
9// Step 2: Call API — Marketo Auth > Get Token
10// (no parameters needed, all auth params are Private in the connector)
11//
12// Step 3: Make changes to Marketo_Token (search for existing record)
13// token = result of step 2's access_token
14// expires_at = Current date/time + :3500seconds
15//
16// In any data workflow that calls Marketo API:
17// Step 1: Schedule API workflow > Refresh_Marketo_Token (run synchronously)
18// Step 2: Get Marketo_Token's token (text field)
19// Step 3: Call Marketo API > [desired call] with dynamic_token = step 2's value

Pro tip: Build and test the token refresh workflow independently before adding Marketo data calls. Trigger it manually from the Workflow editor, then check the Marketo_Token Data Type in the Data tab to confirm a token was stored and the expires_at date is approximately one hour from now.

Expected result: The Refresh_Marketo_Token Backend Workflow runs successfully, fetches a new access token from Marketo, and stores it in the Marketo_Token Data Type with an expires_at timestamp ~58 minutes from now. The Logs tab → API Workflow Logs shows a successful run.

5

Build the Lead Sync Workflow

With authentication working, the primary integration workflow is syncing Bubble user records into Marketo as leads. This is the most common Marketo use case — keeping Marketo's lead database current with what is happening in your Bubble app. In Bubble's main Workflow editor, create a new workflow triggered by the event that should initiate a lead sync — typically 'A User signs up', 'A User's profile is updated', or a custom event like a user completing a key action. For each trigger, the workflow should: 1. Step 1: Schedule API workflow → Refresh_Marketo_Token (ensure the stored token is valid) 2. Step 2: Retrieve the current token from Marketo_Token Data Type (Do a search for Marketo_Token, first item's token field) 3. Step 3: Call Marketo API → Upsert Lead, passing: - dynamic_token = result of Step 2 - lead_email = Current User's email - first_name = Current User's first name - last_name = Current User's last name - company = Current User's company (if stored in Bubble) 4. Step 4: If the upsert returned a Marketo lead ID, store it in the User Data Type — this allows future calls to use the ID directly rather than looking up by email each time. For looking up an existing lead's data (including lead score), use the 'Get Lead by Email' call: GET /rest/v1/leads.json with filterType=email and filterValues=user@example.com. Marketo returns the lead's fields including leadScore, which you can display in a dashboard or use in Bubble Conditionals to gate features for highly-engaged users. For pushing a lead into a smart campaign, use POST /rest/v1/campaigns/[campaign_id]/trigger.json — but note this requires knowing the campaign ID in advance. Retrieve the list of available campaigns with GET /rest/v1/campaigns.json and store the relevant IDs as Bubble App Constants. RapidDev's team has built Marketo lead-sync pipelines in Bubble for enterprise clients — if your setup involves complex field mapping, multi-instance coordination, or high-volume sync requirements, a free scoping call is available at rapidevelopers.com/contact.

marketo_lead_lookup.json
1// GET /rest/v1/leads.json — Look up lead by email
2// Request
3{
4 "method": "GET",
5 "url": "https://AAA-BBB-123.mktorest.com/rest/v1/leads.json",
6 "headers": {
7 "Authorization": "Bearer <dynamic_token>"
8 },
9 "params": {
10 "filterType": "email",
11 "filterValues": "<lead_email>",
12 "fields": "id,email,firstName,lastName,company,leadScore,createdAt,updatedAt"
13 }
14}
15
16// Successful response structure
17{
18 "requestId": "1234#abcdef",
19 "result": [
20 {
21 "id": 1001234,
22 "email": "user@example.com",
23 "firstName": "Jane",
24 "lastName": "Smith",
25 "company": "Acme Corp",
26 "leadScore": 75,
27 "createdAt": "2024-01-15T10:30:00Z",
28 "updatedAt": "2024-06-20T14:22:00Z"
29 }
30 ],
31 "success": true
32}

Pro tip: The 'fields' query parameter on lead lookup requests limits which fields Marketo returns — always specify exactly the fields you need. This reduces response size, speeds up Bubble's field detection, and avoids accidentally requesting hundreds of custom fields that may exist on an enterprise Marketo instance.

Expected result: A Bubble workflow successfully upserts a lead into Marketo and stores the returned Marketo lead ID in the Bubble User record. A test lead lookup by email returns lead score and field data. The Marketo_Lead Data Type is populated with at least one record from a test sync.

6

Handle Pagination and Set Up Privacy Rules

Two final production-readiness tasks: handling large result sets with pagination, and protecting the Marketo lead data you store in Bubble. Marketo's REST API returns paginated results using a nextPageToken field. For example, GET /rest/v1/leads.json returns a maximum of 300 records per call. If the response contains a nextPageToken field, there are more records to retrieve. In Bubble, implement pagination using a recursive Backend Workflow: - First call: GET /rest/v1/leads.json with your filter parameters → store results and check for nextPageToken in response. - If nextPageToken exists: Schedule the same Backend Workflow again, passing the token as an input parameter → Bubble appends it as a 'nextPageToken' query param on the next call. - This recursion continues until a call returns no nextPageToken. Be aware that recursive Backend Workflows in Bubble are subject to a 30-second per-workflow-run timeout. For very large Marketo instances with thousands of leads, consider pulling data in chunks over multiple scheduled runs rather than in a single recursive chain. For privacy: any Marketo lead data (email addresses, lead scores, company names) stored in Bubble Data Types must have appropriate Privacy Rules. Go to Data → Privacy → click your Marketo_Lead Data Type → Add a rule. The default rule should restrict all fields ('Find this in searches? No', 'View all fields? No') and then create an explicit rule for Admins or the specific roles that should see lead data. Without Privacy Rules, any authenticated Bubble user can query the Marketo_Lead table via the API. Also add a note to your Marketo_Lead Data Type description about the 50,000 calls/day limit — when your Bubble app and any existing Marketo integrations (Salesforce, Hubspot, native connectors) share this pool, a high-volume Bubble sync can impact critical business integrations. Check with your Marketo administrator about actual daily usage before building high-frequency sync workflows.

marketo_pagination_privacy.txt
1// Recursive pagination logic (Backend Workflow pseudocode)
2//
3// Backend Workflow: 'Fetch_Marketo_Leads_Page'
4// Input: next_page_token (text, optional)
5//
6// Step 1: Call Marketo API > Get Leads
7// - If next_page_token input is not empty, add param nextPageToken = input value
8//
9// Step 2: For each result in Step 1's result array:
10// - Create or update a Marketo_Lead record
11//
12// Step 3: Condition — does Step 1's response contain a nextPageToken field?
13// IF YES:
14// - Schedule API workflow > Fetch_Marketo_Leads_Page
15// - Pass next_page_token = Step 1's nextPageToken value
16// IF NO:
17// - End workflow (pagination complete)
18
19// Data → Privacy rule for Marketo_Lead Data Type:
20// Rule 1 (Everyone): Find this in searches = No, View all fields = No
21// Rule 2 (Admins/Operators): Find this in searches = Yes, View all fields = Yes

Pro tip: Test your pagination workflow on a Marketo instance with at least 301 leads. If you only have a few test leads, the nextPageToken will never appear and you cannot verify the recursive flow works correctly.

Expected result: A paginated lead fetch workflow correctly retrieves all leads across multiple pages. Privacy Rules on the Marketo_Lead Data Type prevent unauthorized access. The Logs tab shows successful API workflow completions without timeouts.

Common use cases

Lead Sync from Bubble User Database to Marketo

When a user signs up, updates their profile, or completes a key action in your Bubble app, automatically create or update their lead record in Marketo. This keeps your Marketo instance in sync with your Bubble user database without manual CSV exports, enabling Marketo's smart campaigns to trigger based on real-time Bubble activity.

Bubble Prompt

Copy this prompt to try it in Bubble

Lead Scoring and Qualification Dashboard

Build an internal sales or marketing operations tool that pulls Marketo lead scores, engagement history, and campaign membership for a list of prospects. Sales reps paste email addresses into a Bubble Repeating Group and see lead score, last activity date, and campaign enrollment status without leaving the tool.

Bubble Prompt

Copy this prompt to try it in Bubble

Smart Campaign Enrollment Trigger

When specific conditions are met in your Bubble app — a free trial expires, a user reaches a usage threshold, or an account is flagged for upsell — automatically push that lead into a targeted Marketo smart campaign that kicks off a personalized email nurture sequence.

Bubble Prompt

Copy this prompt to try it in Bubble

Troubleshooting

API call returns 401 Unauthorized with 'No Matching Result' in the Marketo Auth call

Cause: The Client ID or Client Secret is incorrect, or they belong to a different Marketo instance than the Munchkin URL you configured. This also occurs if the LaunchPoint service was deleted or the API-only user was deactivated.

Solution: In Marketo, go to Admin → Integration → LaunchPoint → View Details for your Bubble Integration service. Verify the Client ID matches exactly what is in your API Connector. If the API-only user was deactivated (e.g., they left the organization and an IT offboarding script deactivated the account), create a new API-only user and update the LaunchPoint service assignment.

All Marketo API data calls return 602 'Access token expired' or 601 'Access token invalid'

Cause: The access token stored in the Marketo_Token Data Type has expired (tokens last 3,600 seconds) and the Refresh_Marketo_Token workflow did not run before this call, or the token row in the Data Type is empty because the workflow has never run successfully.

Solution: Manually trigger the Refresh_Marketo_Token Backend Workflow from the Workflow editor to populate the token. Then verify your data workflows correctly call the refresh workflow as their first step before reading the token. Check the Logs tab → API Workflow Logs for any errors in the refresh workflow itself.

The Marketo Auth 'Get Token' call initializes successfully but GET /rest/v1/leads.json returns 403 Forbidden

Cause: The API-only user's role does not include the required permission for the endpoint you are calling. Marketo permissions are granular — 'Access API' enables token generation, but specific operations (Read-Write Lead, Read-Only Campaign, etc.) require separate permissions.

Solution: In Marketo Admin → Security → Roles, edit the 'Bubble API Role' and add the missing permission (e.g., Read-Write Lead for /leads.json calls, Read-Only Campaign for /campaigns.json). Changes to role permissions take effect immediately — re-test the API call after saving.

'There was an issue setting up your call' error when initializing the Marketo API calls in the API Connector

Cause: The initialization call returned an error response (e.g., the test email used for lead lookup does not exist in Marketo, or the access token passed as dynamic_token during initialization was already expired). Bubble requires a successful response with actual data to detect field types.

Solution: Use a lead email address that you know exists in your Marketo instance for the initialize call test. Also ensure you manually run the Refresh_Marketo_Token workflow first to get a valid token, then copy that token from the Marketo_Token Data Type in the Data tab and paste it temporarily into the dynamic_token field during initialization.

Lead upsert calls succeed (return 200) but the lead does not appear in Marketo's database

Cause: Marketo's upsert endpoint returns success even when data validation silently rejects the record. Common causes: email format invalid, a required custom field in your Marketo instance was not provided, or the action field was omitted (it defaults to 'createOrUpdate' but some instances have custom validation).

Solution: Check the 'result' array in the API response — each lead has a 'status' field that will show 'created', 'updated', or 'skipped'. If status is 'skipped', check the 'reasons' array in the same result object for the specific validation error. Common fix: ensure the email field is correctly mapped and the body follows exactly the structure shown in the API Connector code block.

Best practices

  • Always run Refresh_Marketo_Token as the first step in every workflow that calls the Marketo API — access tokens expire after one hour, and enterprise workflows may run infrequently enough that a stale token is the normal starting state.
  • Store your Marketo Munchkin base URL as an App Constant (MARKETO_BASE_URL) rather than hardcoding it in individual API calls — a future instance migration or URL change requires editing only one place.
  • Coordinate with your Marketo administrator about the 50,000 calls/day shared limit before building high-frequency sync workflows — Salesforce sync and other native Marketo integrations count against the same daily pool.
  • Apply Bubble Privacy Rules to the Marketo_Lead Data Type immediately after creating it — lead data including email addresses and company information must not be queryable by all authenticated Bubble users.
  • Use the 'lookupField: email' action in upsert calls to prevent duplicate lead creation — Marketo will create or update based on the email field match, keeping your lead database clean.
  • For large result sets, implement recursive Backend Workflows for pagination rather than assuming all results fit in a single response — Marketo returns a maximum of 300 records per call.
  • Add the Marketo lead ID returned from upsert operations to the Bubble User Data Type — future calls using a numeric ID are faster and more reliable than email-based lookups, especially if a user changes their email.
  • Monitor WU (Workload Units) consumption in Bubble's Logs tab — each API Connector call, Backend Workflow execution, and Data Type operation consumes WU; a high-volume Marketo sync can significantly increase your monthly Bubble costs.

Alternatives

Frequently asked questions

Does Bubble's free plan support a Marketo integration?

Partially. You can configure the API Connector on the free plan and test individual calls manually. However, the Backend Workflows required for server-side OAuth token management (the Refresh_Marketo_Token workflow) are only available on paid Bubble plans (Starter at $32/mo or above). Without Backend Workflows, you cannot reliably manage the 1-hour token expiry in a production integration. Upgrade to a paid plan before attempting a Marketo integration.

Why does every Marketo URL include a strange ID like 'AAA-BBB-123'?

That is your Marketo Munchkin ID — a unique identifier assigned to every Marketo instance when it is provisioned. Marketo is a multi-tenant enterprise platform where each customer has a completely isolated instance with its own subdomain. There is no universal 'api.marketo.com' endpoint. Find your Munchkin ID in Marketo Admin → Integration → Munchkin.

What is a LaunchPoint service and why do I need it?

LaunchPoint is Marketo's marketplace for third-party integrations. Even when building a custom internal integration (not a marketplace product), Marketo requires you to create a 'Custom' LaunchPoint service to generate the client_id and client_secret used for OAuth authentication. This is a Marketo security model requirement — you cannot authenticate to the REST API without creating a LaunchPoint service first.

My Marketo admin has left the company. How do I keep the integration running?

The LaunchPoint service credentials (Client ID and Client Secret) will continue to work as long as the API-only user account remains active. The critical risk is if an IT offboarding process deactivates the API-only user account. Before your admin leaves, create a new API-only user linked to a shared service account email (not a personal address), reassign the LaunchPoint service to that user, and update the credentials in Bubble's API Connector. The original admin's departure will not break the integration if these steps are completed.

How do I test the Marketo integration without affecting production lead records?

Marketo does not have a built-in sandbox environment on most plan tiers. Best practice: create a dedicated test list or program in Marketo and use test email addresses (e.g., test+bubble@yourcompany.com format). Marketo's upsert endpoint uses email as the lookup key — using a unique test email ensures test records are easy to identify and delete after testing.

Can Bubble receive real-time notifications when something changes in Marketo?

Yes, but with limitations. Marketo supports webhooks that can notify external URLs when specific triggers fire (e.g., a lead reaches a score threshold, completes a form, or enters a smart campaign). You would create a Bubble Backend Workflow (API Workflow) endpoint and register it in Marketo Admin → Integration → Webhooks. This requires a paid Bubble plan. Note that Marketo webhooks are configured per smart campaign step — they are triggered by campaign logic, not by generic data changes.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Bubble integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.