Marketing & Ads
Marketo, Iterable, Braze, Google Ads, Meta Ads, and other marketing toolsets.
#Marketing & ads
Marketing-automation, lifecycle-messaging, and paid-media connectors. Every connector follows the standard @toolset / @toolify shape and the agent-ready toolset pattern (compact summaries by default, opt-in raw IDs, tolerant write inputs).
#Agent-ready behavior (overview)
List tools across this category return compact summaries with response-local display refs (campaign_ref, list_ref, template_ref, canvas_ref, account_ref, ad_set_ref, ad_ref, creative_ref, segment_ref, audience_ref, ad_group_ref). Raw provider IDs (numeric Marketo IDs, Iterable list IDs, Braze campaign UUIDs, Meta act_.../campaign IDs, LinkedIn account URNs, TikTok numeric IDs, Google Ads resource names) are hidden by default and exposed via include_ids=True when a follow-up tool (get_*, update_*, delete_*, trigger_campaign, add_*, remove_*) needs them.
Write tools that take an identifier accept either the raw ID or the dict from the matching list tool. This includes Marketo trigger_campaign / add_leads_to_list / remove_leads_from_list, Iterable add_subscribers / remove_subscribers, Braze trigger_campaign / trigger_canvas, Meta update_campaign / delete_campaign, LinkedIn get_campaign / update_campaign, TikTok update_campaign / update_campaign_status.
Destructive tools across this group (require user confirmation): delete_leads, remove_leads_from_list (Marketo); delete_user, remove_subscribers (Iterable); delete_users (Braze); delete_campaign (Meta). The TikTok update_campaign_status tool (used to pause / archive campaigns) is a regular write -- agents should still confirm pause / archive intent with the user before flipping the status of a running campaign.
#MarketoToolSet
from maivn_tools import MarketoToolSet
connector = MarketoToolSet(
munchkin_id="123-ABC-456",
access_token=secrets["MARKETO_TOKEN"],
)Token exchange against the Marketo Identity service is left to the caller. Tools: get_lead_by_filter, create_or_update_leads, delete_leads (destructive), list_programs, list_campaigns, trigger_campaign, list_static_lists, add_leads_to_list, remove_leads_from_list (destructive), create_bulk_lead_export.
Agent-ready behavior
list_campaigns: summary withcampaign_ref, name, type, program name, active state, workspace. Raw numeric campaign IDs hidden; opt in withinclude_ids=True(needed bytrigger_campaign).list_static_lists: summary withlist_ref, name, program name, workspace, created/updated. Opt in for the raw list ID (needed byadd_leads_to_list/remove_leads_from_list).- Tolerant inputs:
trigger_campaign,add_leads_to_list,remove_leads_from_listaccept a numeric ID, a campaign/list dict from the matching list tool, or a list of such. - Destructive:
delete_leads,remove_leads_from_list. Confirm before invoking.
#IterableToolSet
from maivn_tools import IterableToolSet
connector = IterableToolSet(api_key=secrets["ITERABLE_KEY"])Tools: update_user, get_user, delete_user (destructive), track_event, track_purchase, list_lists, add_subscribers, remove_subscribers (destructive), list_campaigns, list_templates.
Agent-ready behavior
list_lists: summary withlist_ref, name, list type, size, created. Opt in withinclude_ids=Truefor the numericlist_id(needed byadd_subscribers/remove_subscribers).list_campaigns: summary withcampaign_ref, name, type, status, send size, created. Opt in forcampaign_id.list_templates: summary withtemplate_ref, name, type, created. Opt in fortemplate_id.- Tolerant inputs:
add_subscribers,remove_subscribersaccept a numeric list ID or a list dict fromlist_lists(include_ids=True). - Destructive:
delete_user,remove_subscribers. Confirm before invoking.
#BrazeToolSet
from maivn_tools import BrazeToolSet
connector = BrazeToolSet(
rest_endpoint="https://rest.iad-01.braze.com",
api_key=secrets["BRAZE_KEY"],
)Tools: track_users, export_user_ids, delete_users (destructive), send_messages, trigger_campaign, trigger_canvas, list_campaigns, list_canvases, subscribe_users, export_segment.
Agent-ready behavior
list_campaigns: summary withcampaign_ref, name, tags, created, last edited. Rawcampaign_idhidden; opt in withinclude_ids=True(needed bytrigger_campaign).list_canvases: summary withcanvas_ref, name, tags, created, last edited. Opt in forcanvas_id(needed bytrigger_canvas).- Tolerant inputs:
trigger_campaignandtrigger_canvasaccept a raw UUID or the dict from the matching list tool. - Destructive:
delete_users. Confirm before invoking.
#GoogleAdsToolSet
from maivn_tools import GoogleAdsToolSet
connector = GoogleAdsToolSet(
access_token=token,
developer_token=secrets["GADS_DEVELOPER_TOKEN"],
login_customer_id="111-222-3333",
api_version="v17",
)Tools: list_accessible_customers, search (GAQL), search_stream, mutate_campaigns, mutate_ad_groups, mutate_ad_group_ads, mutate_campaign_budgets, upload_click_conversions, upload_offline_user_data.
Agent-ready behavior
- Google Ads is GAQL-first -- there are no fixed list tools, so no
_refsummaries.search/search_streamreturn the raw Google Ads response (rows of resource names + selected fields). Resource names (e.g.customers/.../campaigns/...) are the canonical identifier the mutate tools take, so they are kept in results.
#MetaAdsToolSet
from maivn_tools import MetaAdsToolSet
connector = MetaAdsToolSet(access_token=secrets["FB_AD_TOKEN"])Tools: list_ad_accounts, get_ad_account, list_campaigns, create_campaign, update_campaign, delete_campaign (destructive), list_ad_sets, list_ads, get_insights, list_custom_audiences.
Agent-ready behavior
list_ad_accounts: summary withaccount_ref, name, account status, currency, timezone, business name. Rawact_...IDs hidden; opt in withinclude_ids=True.list_campaigns: summary withcampaign_ref, name, objective, status, daily/lifetime budget,updated_time. Opt in forcampaign_id(needed byupdate_campaign,delete_campaign,get_insights).list_ad_sets: summary withad_set_ref, name, status, optimization goal, billing event,updated_time. Opt in for the raw ID.list_ads: summary withad_ref, name, status, creative name,updated_time. Opt in for the raw ID.list_custom_audiences: summary withaudience_ref, name, approximate count, subtype, retention days. Opt in for the raw ID.- Tolerant inputs:
update_campaign,delete_campaign,get_insightsaccept a raw ID or a resource dict from the matching list tool. - Destructive:
delete_campaign. Confirm before invoking (also removes ad sets and ads).
camps = connector.list_campaigns(ad_account_id="act_123", include_ids=True)
connector.update_campaign(camps["campaigns"][0], fields={"status": "PAUSED"})#LinkedInAdsToolSet
from maivn_tools import LinkedInAdsToolSet
connector = LinkedInAdsToolSet(access_token=secrets["LI_ADS_TOKEN"])Tools: list_ad_accounts, get_ad_account, list_campaigns, get_campaign, update_campaign, list_creatives, ad_analytics, list_dmp_segments, add_users_to_dmp_segment.
Agent-ready behavior
list_ad_accounts: summary withaccount_ref, name, status, currency, type. Raw account URN hidden; opt in withinclude_ids=True.list_campaigns: summary withcampaign_ref, name, status, type, cost type, daily budget. Opt in for the raw campaign ID (needed byget_campaign,update_campaign,ad_analytics).list_creatives: summary withcreative_ref, status, intended status, last modified. Opt in for the raw ID.list_dmp_segments: summary withsegment_ref, name, audience count, source platform. Opt in for the raw ID (needed byadd_users_to_dmp_segment).
#TikTokAdsToolSet
from maivn_tools import TikTokAdsToolSet
connector = TikTokAdsToolSet(access_token=secrets["TTAD_TOKEN"])Tools: list_advertisers, get_advertiser_info, list_campaigns, create_campaign, update_campaign, update_campaign_status, list_ad_groups, list_ads, get_reports, list_audiences.
Agent-ready behavior
list_campaigns: summary withcampaign_ref, name, objective, status, budget,modify_time. Raw numeric campaign IDs hidden; opt in withinclude_ids=True(needed byupdate_campaign,update_campaign_status).list_ad_groups: summary withad_group_ref, ad group name, status, optimization goal, budget. Opt in for the raw ID.list_ads: summary withad_ref, ad name, status, creative material. Opt in for the raw ID.list_audiences: summary withaudience_ref, audience name, type, approximate count. Opt in for the raw ID.- Tolerant inputs:
update_campaign,update_campaign_statusaccept raw IDs or campaign dicts fromlist_campaigns(include_ids=True). update_campaign_statusis the pause / archive control -- it is not flaggeddestructive=Truebecause TikTok allows reactivation, but pausing or archiving a live campaign has billing / pacing implications. Confirm with the user before flipping the status of an active campaign.