Don’t give two Marketo programs the same name

Level 10 - Community Moderator
Level 10 - Community Moderator

I can hear your inner thoughts: “Don’t do what now? Marketo already enforces the rule that two programs can’t have the same name (at the same point in time).”


Ah, but that rule isn’t as strict as you think. You can create a program with a nested program of exactly the same name, though I dearly wish you could not:




Why is that setup a bad move? Because the popular Push Lead REST API method accepts a program name, not a program ID.


Push Lead is an incredibly useful method ’cuz it lets you consolidate, in one API call, upserting up to 300 Marketo people and upserting a program membership for all of them.[1] This keeps your code relatively retry-free and saves massively on daily API calls.


But for reasons I’m not privy to, the all-purpose Push Lead endpoint — unlike the single-purpose Sync Program Member and comparatively complex Submit Form endpoints — doesn’t let you pass a program ID even if you know it in advance.


When building integrations that need a program identifier, I have people either:


  • choose from a dropdown of program names but store the ID under the hood (remember, the name can change over time and is not necessarily safe to store)


  • explicitly paste or type the numeric program ID (they’re relatively hard to mistype and, again, never change)


Unfortunately, when it comes time to call Push Lead you have to know the name. You can do a periodic background refresh of ID-to-name mappings; always lookup the program name right before you push (inefficient to be sure); or store the name from the beginning. But no matter what, you have to know the name.


Push Lead then magically (re)does the name-to-ID mapping for you on the server side. But when there’s more than one program with that name, it always finds the latest program created. That’ll be the nested program.


It thus becomes impossible to use Push Lead to add someone to the parent program. In the screenshot above, the parent program is a Zoom-linked Event program. So much for your custom API-based integration registering people for the webinar!


Is this worth worrying about?

I think so, since at any time you might introduce a custom integration. So get your nomenclature ducks in a row now. Also, a nested program having the same name as its parent is just plain confusing.☺


[1] Note the people in a single API call are added to the same program with the same status.