LoadersMarketo

Marketo Loader

The Marketo loader pulls marketing automation data from your Marketo instance into your data warehouse. It uses Marketo’s REST API with the OAuth 2.0 client credentials grant and supports incremental sync via the updatedAt timestamp for lead records and activity dates for event data.

Prerequisites

  • A Marketo instance (any edition with API access)
  • A Marketo API-only user with a custom role that has API access permissions
  • A Marketo custom service (LaunchPoint integration) for OAuth credentials
  • A connected Warehouse (target warehouse) with write permissions on the target schema

Authentication

The Marketo loader uses OAuth 2.0 Client Credentials for authentication.

Setting Up API Access in Marketo

Step 1: Create an API-only user role

  1. In Marketo, go to Admin > Users & Roles > Roles
  2. Click New Role
  3. Name the role (e.g., “SignalSmith API”)
  4. Under Access API, enable:
    • Read-Only Lead
    • Read-Only Activity
    • Read-Only Assets
    • Read-Only Campaign

Step 2: Create an API-only user

  1. Go to Admin > Users & Roles > Users
  2. Click Invite New User
  3. Enter an email and name (e.g., “signalsmith-api@yourcompany.com”)
  4. Check API Only
  5. Assign the API role created in Step 1

Step 3: Create a LaunchPoint custom service

  1. Go to Admin > LaunchPoint
  2. Click New > New Service
  3. Enter a display name (e.g., “SignalSmith Loader”)
  4. Set Service to “Custom”
  5. Select the API-only user created in Step 2
  6. Click Create
  7. Note the Client ID and Client Secret

Step 4: Find your REST API endpoint

  1. Go to Admin > Web Services
  2. Under REST API, note the Endpoint URL (e.g., https://123-ABC-456.mktorest.com/rest)
  3. Note the Identity URL (e.g., https://123-ABC-456.mktorest.com/identity)

Step 5: Configure in SignalSmith

FieldDescriptionExample
Endpoint URLMarketo REST API base URLhttps://123-ABC-456.mktorest.com
Client IDFrom the LaunchPoint custom serviceabc123def456...
Client SecretFrom the LaunchPoint custom servicexyz789ghi012...

SignalSmith obtains and refreshes access tokens automatically using the client credentials grant.

Available Objects

ObjectAPI NameDescriptionDefault Sync Mode
LeadsleadsLead/contact records with all standard and custom fieldsIncremental
ListslistsStatic lists and their metadataFull Refresh
List Membershipslist_membershipsJunction table linking leads to static listsFull Refresh
ProgramsprogramsMarketing programs (email, event, engagement, default)Full Refresh
Program Membersprogram_membersLeads enrolled in programs with their statusIncremental
ActivitiesactivitiesLead activity events (email opens, clicks, form fills, web visits)Incremental
Activity Typesactivity_typesDefinitions of all activity types available in your instanceFull Refresh
CampaignscampaignsSmart campaigns and their metadataFull Refresh
Custom Objectscustom_objectsCustom objects defined in your Marketo instanceIncremental
ChannelschannelsProgram channel definitionsFull Refresh
TagstagsProgram tag definitionsFull Refresh

Activities

Marketo activities represent discrete events — email opens, link clicks, form submissions, web page visits, score changes, and more. Activities are high-volume and extracted with a date-range cursor. Each activity type has a unique numeric ID; the activity_types reference table provides human-readable names.

Common activity types:

Activity Type IDNameDescription
1Visit Web PageLead visited a tracked page
2Fill Out FormLead submitted a Marketo form
6Send EmailEmail was sent to the lead
7Email DeliveredEmail was delivered
8Email BouncedEmail bounced
9Unsubscribe EmailLead unsubscribed
10Open EmailLead opened an email
11Click EmailLead clicked a link in an email
46Interesting MomentCustom interesting moment logged

Custom Objects

Marketo custom objects are discovered automatically and extracted like standard objects. They are identified by their API name and appear in the object list during setup.

Configuration

SettingDescriptionDefault
Endpoint URLMarketo REST API base URL— (required)
Client IDOAuth client ID from LaunchPoint— (required)
Client SecretOAuth client secret from LaunchPoint— (required)
ObjectsList of objects to sync— (you choose during setup)
Sync ModeFull Refresh or Incremental (per object)Incremental
Cursor FieldField used for incremental syncupdatedAt (leads), activityDate (activities)
Primary KeyField(s) that uniquely identify a recordid
Target SchemaWarehouse schema for Marketo tables— (required)
Table PrefixOptional prefix for table namesmkto_
ScheduleSync frequencyHourly

Scheduling Notes

  • Daily API quota: Marketo enforces a daily API call quota (typically 50,000 calls per day, varies by contract). Each loader run consumes calls proportional to the data volume. Monitor your usage in Marketo’s Admin panel.
  • Bulk Extract API: For leads and activities with large volumes, SignalSmith uses Marketo’s Bulk Extract API. This creates export jobs that run asynchronously in Marketo and return data in CSV format, which is significantly more efficient than paging through the REST API.
  • Activity date range: Activities are extracted using a date range filter. The incremental cursor tracks the most recent activity date extracted. SignalSmith applies a lookback window (default: 2 days) to capture late-arriving activities.
  • Lead field limits: Marketo’s API returns a maximum of 300 fields per lead record. If your instance has more than 300 fields, select only the fields you need during object configuration.
  • Concurrent API calls: Marketo limits concurrent API calls (typically 10). SignalSmith manages concurrency automatically, but if other integrations also use the API, contention may slow extraction.

Schema Mapping

Marketo field types are mapped to warehouse-compatible types:

Marketo TypeWarehouse TypeNotes
stringVARCHAR
integerBIGINT
floatDOUBLE
booleanBOOLEAN
dateDATE
datetimeTIMESTAMPUTC normalized from ISO 8601
emailVARCHAR
urlVARCHAR
phoneVARCHAR
currencyDOUBLE
textTEXT / VARCHARLong text area fields
referenceVARCHARLead or custom object references

Troubleshooting

IssueSolution
”601 Access token invalid”The token has expired. SignalSmith should auto-refresh. If persistent, verify the client ID and secret are correct
”602 Access token expired”Same as above — token refresh should be automatic
”606 Max rate limit exceeded”You’ve hit the concurrent API call limit. Reduce sync frequency or coordinate with other Marketo integrations
”607 Daily quota reached”You’ve exhausted the daily API quota. Wait for the quota to reset (resets at midnight CST) or request a quota increase from Marketo
Missing custom fields on leadsCustom fields must be created in Marketo before they appear in the schema. Re-run schema discovery after adding fields
Activities table is very largeActivities are high-volume. Consider syncing only specific activity types or reducing the lookback window
Bulk extract jobs queuingMarketo limits concurrent export jobs (typically 2). SignalSmith queues and waits, which may increase run duration
”610 Requested resource not found”The requested object may not exist or the API user lacks permission. Verify the object name and role permissions

Next Steps

  • Create a model to transform your raw Marketo data
  • Join Marketo leads with CRM data for a complete lead-to-customer view
  • Build audiences based on marketing engagement