Marketo

Creates or updates Adobe Marketo Engage people (leads) server-side through the REST Sync Leads API, keyed by email, so smart campaigns and nurture can act on them.

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

Create a LaunchPoint custom service

Admin > LaunchPoint > New Service (Custom), with an API-only user whose role has Read-Write Person. Copy the Client ID and Client Secret from View Details.

Find your REST base URL

Admin > Integration > Web Services shows the REST API endpoint, for example https://123-ABC-456.mktorest.com/rest; enter it without /rest.

Configuration

FieldTypeRequiredDescription
rest_base_urlstringYesYour Marketo REST endpoint host, with scheme and no trailing slash, from Admin > Integration > Web Services (the REST API Endpoint without /rest). The lead sync and the OAuth token URL are both built from it.
client_idstringYesClient ID of a Marketo LaunchPoint custom service (Admin > LaunchPoint) whose API-only user has the Read-Write Person permission.
client_secretsecretYesClient secret of the same LaunchPoint service, used for the OAuth client credentials token request.
munchkin_idstringNoYour Munchkin account ID (Admin > Munchkin). Not used by the lead sync; kept for reference.

Signal Setup

  1. Navigate to Integrations in the sidebar and open the Integration Library tab.
  2. Find Marketo, click Install and fill in the fields above.
  3. Pick the preset for your vertical, then review the mappings in the blueprint editor.
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",
    "config": {
      "rest_base_url": "https://123-ABC-456.mktorest.com",
      "client_id": "YOUR_CLIENT_ID",
      "client_secret": "YOUR_CLIENT_SECRET"
    },
    "delivery_mode": "server_side"
  }'

API endpoint

POST {rest_base_url}/rest/v1/leads.json
Token: {rest_base_url}/identity/oauth/token (client_credentials; bearer header)

Example body:

{"action": "createOrUpdate", "lookupField": "email",
 "input": [{"email": "jane.doe@example.com", "company": "Acme Ltd", "website": "https://acme.example"}]}

The presets turn on the strict output contract: only the fields the blueprint maps are sent.

Event mapping

B2B / SaaS preset (saas)

Create or update the Marketo person (Sync Leads, lookupField email) on sign-up, lead, demo request, trial start and subscription start, so Marketo smart campaigns and nurture can pick the person up. The email is sent in plain text: it is the Marketo lookup key. Only email, company and website are written; add further standard or custom fields by their REST API names (Admin > Field Management).

Signal eventSent to the vendor as
sign_upcreateOrUpdate
generate_leadcreateOrUpdate
demo_requestedcreateOrUpdate
trial_startedcreateOrUpdate
subscription_startedcreateOrUpdate
identifycreateOrUpdate

Identity and personal data

The person is looked up by email (trimmed, lowercased). The email is sent in plain text: it is Marketo’s lookup key. Company and website come from the identity traits. Add further standard or custom fields by their REST API name (Admin > Field Management).

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.

Known limitations

  • Custom activities are not sent: Marketo’s Add Custom Activities API needs the numeric Marketo lead ID, which Signal does not hold.

Troubleshooting

SymptomCause and fix
Record skipped in a 200 responseMarketo reports per-record failures in the body, for example an unknown field name.
601 / 602 token errorsInvalid or expired token; Signal refreshes it. Persistent errors mean wrong credentials.

See also