Easily integrate with the Marketo SOAP API to find and update leads.
Add this your Gemfile:
gem 'markety'
and run bundle install
.
Instantiate a new Markety client using your Marketo SOAP endpoint, User ID, and Encryption Key
client = Markety::Client.new(USER_ID, ENCRYPTION_KEY, END_POINT)
# or, if using a workspace:
client = Markety::Client.new(USER_ID, ENCRYPTION_KEY, END_POINT, target_workspace: "ws_name")
You can get leads from Marketo by idnum or by email. Markety returns a GetLeadResponse
object which contains an array of leads. Because Marketo allows for an email address to be
tied to more than one lead, getting by email could potentially result in an array of leads
with the same email address so you can call .leads
to get all the leads in the array.
Getting a lead by idnum will return a single lead, however because GetLeadResponse
is
an array of leads, you'll need to add .lead
to get the lead from the response.
# By idnum
lead = client.get_lead_by_idnum("123456").lead # Single lead object (or nil)
# By email
leads = client.get_leads_by_email("[email protected]").leads # array of Leads
After getting your leads, you can update their attributes before syncing.
# Update a leads email address
lead.set_attribute("Email", "[email protected]")
# Update a lead record with an attribute that isn't a string
lead.set_attribute("Activated", true, "Boolean") # [1] see below
Once you're ready to sync back, just tell Markety how you'd like it to sync. There are currently 3 supported methods, "EMAIL", "MARKETO_ID" and "FOREIGN_ID"
# Sync the lead with Marketo
response = client.sync_lead(lead, "EMAIL")
There are a few available list operations available at the moment. Be sure to pass in the lead idnum and not the lead itself to run the query.
# Check if a lead is on a list
client.is_member_of_list('The_List_Name', lead.idnum).list_operation_status? # true if on list
# (alternately, you can use `list_op_status?` or `lop_status?` to save some keystrokes)
# Add a lead to a particular list
client.add_to_list('The_List_Name', lead.idnum).list_operation_status #true if successful add
# Remove a lead from a particular list
client.remove_from_list('The_List_Name', lead.idnum).list_operation_status #true if successful removal
Lastly, if you would like to create a lead in Marketo, you can use the sync lead method the same way you would use the sync lead to update a lead. Just start by instantiating a Markety::Lead.
new_lead = Markety::Lead.new
new_lead.set_attribute("Email", "[email protected]")
response = client.sync_lead(new_lead, "EMAIL")
Be sure you have the correct attribute fields. You can find those in your Market Admin dashboard.
[1] Note that [the Marketo API does not let you create custom fields] (https://community.marketo.com/MarketoDiscussionDetail?id=90650000000PpyEAAS#j_id0:j_id2:j_id9:j_id10:apexideas:j_id248) at this time. In order to set a custom attribute through the API, it must first be added from the Admin interface. (Admin » Field Management » New Custom Field)
# Turn off Savon logging - logging is helpful during development,
# but outputs a lot of text which you may not want in production
client = Markety::Client.new(USER_ID, ENCRYPTION_KEY, END_POINT, { log: false })
PRs are very welcome! Feel free to send a PR for any endpoint you might need.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
###Dev hint:
In irb
, from this repo's root dir, this will load the Markety classes:
> $LOAD_PATH.unshift "./lib"
> require 'markety'
- More tests.
- Add campaign endpoints.
Marketo released a lead REST API on June 20, 2014 so be sure to check developers.marketo.com for another lead management integration possibility.
David Santoso and Grant Birchmeier.