Marketo

Adobe Marketo Engage is a B2B marketing automation platform for lead nurturing, scoring, account-based marketing, and revenue attribution.

Why route Marketo through Datafly Signal

  • Profiles are updated from the server, not the browser. Events reach Marketo even when a tracker blocker or a failed page unload would have dropped a client-side call, so the profile reflects what actually happened.
  • Delivery is batched, rate-limited, and retried. Signal buffers to Kafka, respects the Marketo rate limit, and retries on 429 or transient failure rather than dropping the event.
  • Token lifecycle is handled for you. Signal obtains and refreshes the OAuth credentials Marketo requires, so nothing expires quietly in the middle of a campaign.
  • One consent decision governs every destination. Marketo is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.

Prerequisites

Complete these steps in Marketo before configuring Signal.

Access your Marketo instance

Log in to Marketo at your instance URL (e.g. https://app-ab12.marketo.com). The first segment (ab12 in this example) is your Munchkin ID prefix.

Find your Munchkin ID (Account ID)

Navigate to Admin > Munchkin. Your Munchkin Account ID is shown at the top (format: 123-ABC-456). Copy it — this also determines your REST API base URL: https://{munchkin_id}.mktorest.com.

Create a Custom Service for REST API

Navigate to Admin > LaunchPoint > New Service. Configure:

  1. Service: Custom.
  2. Display name: e.g. “Datafly Signal”.
  3. Description: optional.
  4. API Only User: create a new one (e.g. datafly_signal@your-org). Assign the API Access role and any required object permissions.
  5. Save.

Copy the Client ID and Client Secret

After saving, click View Details on the new service. Copy:

  • Client ID (UUID-like)
  • Client Secret (UUID-like)

Marketo uses these for OAuth 2.0 client-credentials flow. Signal handles token acquisition and refresh automatically.

Configuration

FieldTypeRequiredDescription
munchkin_idstringYesYour Marketo Munchkin Account ID (e.g. 123-ABC-456). Determines the REST endpoint.
client_idstringYesOAuth Client ID from the Custom LaunchPoint service.
client_secretsecretYesOAuth Client Secret.

Signal Setup

Quick Setup

  1. Navigate to Integrations in the sidebar.
  2. Open the Integration Library tab.
  3. Find Marketo under the Marketing Automation category.
  4. Click Install, and fill in the required fields with the credentials gathered above.
  5. Click Install Integration.

API Setup

curl -X POST http://localhost:8084/v1/admin/integration-catalog/marketo/install \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Marketo",
    "variant": "default",
    "config": {
      "munchkin_id": "123-ABC-456",
      "client_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "client_secret": "xxxxxxxxxxxxxxxxxxxx"
    },
    "delivery_mode": "server_side"
  }'

Event Mapping

Datafly EventMarketo ConceptNotes
pageCustom activitySent via Marketo’s Custom Activities API.
Product ViewedCustom activityForwarded with product context.
Order CompletedCustom activity with revenueMapped to a custom activity carrying revenue, currency, order_id.
identifyLead updateEmail and traits update the Marketo lead via POST /rest/v1/leads.json.

Custom activity types must be pre-defined in Marketo’s Admin > Marketo Custom Activities. Signal includes the activityTypeId numeric identifier on each call.

Identity

FieldSourceNotes
emailtraits.emailMarketo’s primary lead key (lookupField: email).
leadId(assigned by Marketo)Internal Marketo ID; resolved from the email match.
firstNametraits.first_nameMaps to Marketo’s First Name lead field.
lastNametraits.last_nameMaps to Marketo’s Last Name lead field.
companytraits.companyMaps to the Company lead field.

Call datafly.identify() with B2B-relevant traits:

datafly.identify("user-123", {
  email: "jane@acme.com",
  first_name: "Jane",
  last_name: "Doe",
  company: "Acme Co"
});

Marketo events should be sent under the marketing consent category. Marketo has its own opt-in lead fields (unsubscribed, marketingSuspended) — Signal forwards CMP consent state so workflows can update these fields when needed.

Verify it’s working

  1. Trigger a test event from your website.
  2. In Marketo, navigate to Database > Search Leads and look up the test lead by email.
  3. Open the lead’s Activity Log to verify Signal-delivered custom activities appear.
  4. In Signal, check Live Events to confirm delivery with a 200 response status.

Troubleshooting

SymptomPossible CauseResolution
401 Unauthorized / token errorsInvalid client credentials or insufficient API permissionsVerify Client ID and Secret in Admin > LaunchPoint > your service. Ensure the API user has the API Access role.
1003 Empty access token parameterWrong Munchkin ID formatMunchkin ID is 123-ABC-456 — not the URL prefix. Check Admin > Munchkin.
Custom activity error 1006Activity type not registeredPre-create the custom activity type in Admin > Marketo Custom Activities and use its numeric ID.
Lead not createdMissing emailMarketo’s default lookup field is email; ensure every identify event carries one.
API call limit reachedDaily quota exceededMarketo enforces a daily API call quota per subscription. Reduce event volume or batch identifies.

Visit Marketo REST API documentation for full reference and Custom Activity details.

See also