As one of the chief “Pardot API Geeks” at Sercante (no, it’s not a real title, but I think it should be), I’m really excited about two big changes to the Pardot API — one of which was confirmed on this Pardot Product Roadmap webinar.
Wait, you don’t know what you can do with the Pardot API? Then you must’ve missed this post. I’ll forgive you if you open it a new tab and read it later.
What’s new with the Pardot API
These two new methods open up new capabilities for large and small Pardot users alike. The great thing about them both is — GEEK TERM ALERT — they are asynchronous, which means we can start processing a job and let it work while the code goes on to do other things. This is really great because the computer doesn’t have to wait and do nothing else while large amounts of data are being processed. We can parallel process and REALLY get a lot done without wasting processing power.
The first Pardot API change is Prospect Import.
We saw the Prospect Import at the 2019 Pardot Developer Experience Dreamforce session I was proud to co-host with Mike Fazio. Documentation can be found here for v4 or v3. As for what it does…Think about how you might import thousands of Prospects into Pardot today. Then throw that out and imagine it happens in the background, automatically, with as many fields as you want mapping over. Every day. Without you having to touch it.
If you have an Enterprise Data Warehouse or some other external source where you are getting records from (HINT HINT a little operation called “Salesforce” fits that description as well) and you want to be able to have the computer send large numbers of Prospects into Pardot without needing a person to manually do the import, this is the feature for you.
So again, powerful stuff on its own, but let’s take it to the next level. Imagine these possibilities:
- On a regular basis, you could use code to clean up junk and normalize picklist field values – turn those “United States” or “U.S.” into US – all without touching Excel.
- You could use code to add some data from a vendor by API before sending the data into Pardot.
- And you could used code to fix every marketer’s Achilles Heel – those ALL CAP NAMES or all lower case names that show up randomly and without reason.
So much activity, so little time to analyze
Now, the second API change will be a huge time saver as well. It involves Visitor Activity Export.
This will allow us to export ALL visitor activities a whole year at a time.
On the surface, you might wonder what you’d do with a year’s worth of data about how all your Prospects have been engaging with you. Think about…
- Exporting it all into a BI tool to get all the bar, pie, and line charts you’d ever want
- Export into a Analytics tool
- Export into a Enterprise Data Warehouse which can interface with your BI/analytics tool on a regular basis to give you tasty marketing activity dashboards
- Summarize into a spreadsheet (We do this with some of our Audits)
- Export into your own database so you can do SQL queries for ad-hoc reporting (if that’s your sort of thing)
So yeah, COOL STUFF.
According to the docs v4 and v3, the only filtering currently available is date. So if we want to grab just a certain type of activity, such as email opens, we are going to have to pull down the entire data-set and then do our own filtering for email opens. This may mean that what we currently have available to us won’t work with your destination BI or analytics tool if it can’t filter for you.
Now, a quick pause to elucidate via true geek-speak for those who want the In the Weeds version:
The new methods don’t appear to be included in many wrapper libraries yet, but we are working on getting these added to a few. One thing to note is that they no longer use just GET/POST variables but rather a ContentType: application/json and a body with the JSON string. Thus you may need to make some adjustments to your code if you plan on using these new methods.
A bright future ahead for the Pardot API
Looking at how the documentation is structured for these changes, we are optimistic! We think we’re seeing a new pattern for Bulk API calls and can likely expect additional Pardot record types to be built to follow these two new patterns. That means we’ll be able to surface even more Pardot data in our external tools of choice, and therefore marketers can show the business how Marketing is really bringing in more leads and revenue.
What’s your Pardot data challenge?
Like I said, Sercante (heart emoji) the Pardot API. If you’re seeing data quality challenges on a regular basis that you’re spending a lot of time on manually correcting, let us know in the comments! We may be able to save you some major time through the magical API world.
Hi,
I am looking for the solution to push lead/contact from Salesforce to pardot on the basis of the field criteria. e.g. if my check box is true it pushes the prospect to Pardot.
Please advise how I can achieve this. I don’t want to use market data sharing for this.
Thank You
Hi Ankur how did you get this done criteria based pushing from Pardot to salesforce by not using market data sharing.
Marketing Data Sharing is the Salesforce-endorsed method for doing this, so it’s definitely worth a look. The alternative would require an approach like…
* using a named connector user for your connector (rather than the integration user)
* setting up sharing rules and private records in your Salesforce org
* developing logic to selectively hide records from the connector user
* developing a method (e.g. Pardot’s API; automated submissions to form handlers; many options here) to push leads to Pardot when certain conditions are met
Not a project for the faint of heart!
Great post, Mike! Probably a silly question, but would I be able to use AMPscript in Pardot to fix those pesky ALL CAPS NAMES similar to how I would in Marketing Cloud?
AMPscript is currently a Marketing Cloud capability and doesn’t exist in Pardot. But that is the right way of thinking, as we can do CSS text-transform to accomplish the same goal of capitalizing names. See https://www.pardot.com/blog/quick-tips-5-great-pointers-from-the-pardot-services-team/
This css trick has it’s limitations as it would incorrectly capitalize a name such as “da Vinci” which is a pattern we can address with more sophisticated code using the API. But, the CSS trick is something ALL of us can do right now without needing to mess with the API.
I am struggling with setting field values in Pardot.
For example, i would like to set a value for a custom field from the API, on an account level (not prospect account), as the content of the field value would be the same for everyone i am sending to on a specific list.
It however seems i can’t create an account custom field, that can be updated from the API.
The only way of updating a field with the same value for those who should recieve the email with the custom field value merge, is to create a custom field on prospect level and batchUpdate every single prospect with new field value (even thought, its the same value for all prospects). This creates an overflow of data in database, and i think is very bad practice.
The Pardot API is READ ONLY on the account fields even though we have the appearance of being able to write to the object. These Create/Update/Delete on the ACCOUNT are for Pardot instances that are not connected to a CRM. We have the illusion of functionality when we look at the documentation. This is mentioned somewhere in the docs, but not everywhere where it applies, so it’s an easy detail to miss.
You found the way to do this with the API by writing to Prospect custom fields. I often will write to Prospect Custom Fields data that already exist in Pardot but isn’t made visible to us in the UI or merge fields (IDs for example).
Some other possible ways to accomplish setting value that is persistent across all data:
Write it into the email templates directly (I know, but sometimes simple can be effective)
Use Pardot Snippets https://www.pardot.com/blog/introducing-snippets-how-to-save-time-and-boost-efficiency-with-reusable-content/
Personally, I tend to write a dynamic content on Score >-9999999999 with the default and the first value with the same content and use this as my ‘global variable’ to put content into everything. I used to do this with the current year for example (Until I learned about %%current_year_YYYY%% )
Thanks Mike,
In this case i was to figure how to set an URL in a CTA in an email from the API and then send the email to a list. Thus was not able to predefine content (URL) send to Pardot.
The only real solution i was able to find, was to send the full HTML with the new url through the API, when sending to a list. Kinda dull way of doing it, and i don’t like the idea of move the full html template out of Pardot.
Another solution i could think of was just to use a shortlink service that would hold the URL, and i would be able to change the url in the service from time to time. However i am not sure how that would affect tracking in Pardot.
I want to log custom activities in Pardot other than the default activities that the Pardot offers. Is there any way of doing that?
Custom Fields, Tags, and Static Lists can give us the ability to log custom activities.
Hi, can you please help me how to create a custom connector for pardot using API like Gotowebinar has created.