Skip to content

LinkedIn Ads ​

Ad accounts, reports, campaigns, creatives, boosting, lead gen forms, conversions and matched audiences. 30 tools. This page is generated from the server's own tool list, version 0.1.0, and is not edited by hand. The descriptions are the ones your AI client reads, so they are written for it. All tools lists every page.

linkedin_ads_list_accounts ​

Kind: read. It is marked as changing nothing.

List the LinkedIn ad accounts your LinkedIn login can advertise from. Call this first: every other linkedin_ads_* tool takes an ad_account_id from here.

Each account carries its currency (all money in linkedin_ads_* tools is in that currency's units), status, whether LinkedIn is serving its ads and what is holding it if not (holds, e.g. BILLING_HOLD), whether it is a test account, your role on it (can_edit is false for a VIEWER, who can only read), and this installation's spending limits for its currency. LinkedIn's API shows no balance, spend or payment method for an account. An account marked allowed=false, or one whose spend_limits has a how_to_set note, cannot be changed from here until an administrator acts; the note says where.

It takes no arguments.

linkedin_ads_list ​

Kind: read. It is marked as changing nothing.

List the campaign groups, campaigns or creatives of a LinkedIn ad account, newest first: name, id, status, whether LinkedIn can serve it and what is holding it (holds), objective, budgets, bid and schedule, and for a creative the post it shows and its review status. Budgets and bids are in the account's currency units.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
leveltextno"campaign""campaign_group", "campaign" or "creative".
parent_idtextnononeOnly the campaigns of this campaign group, or the creatives of this campaign.
statuseslist of textnononeStatuses to include, e.g. ["ACTIVE"]. Left out, everything except ARCHIVED, CANCELED, PENDING_DELETION and REMOVED; name those to see them.
limitwhole numberno50Rows per page (1-100).
page_tokentextnononenext_page_token from the previous page.

linkedin_ads_performance ​

Kind: read. It is marked as changing nothing.

Report how a LinkedIn ad account performed, in one call: spend, impressions, clicks, landing page clicks, leads, lead form opens, conversions, video views and engagements, with CTR, CPC, CPM and cost per lead worked out by this server. One row per account, campaign group, campaign or creative (level), or per value of who saw it (by). Ask for one report with a level, not one call per campaign. Spend is in the account's currency units.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
sincetextyesFirst day, YYYY-MM-DD, in UTC.
untiltextnononeLast day, YYYY-MM-DD, included. Left out, today.
leveltextnononeOne row per "ACCOUNT", "CAMPAIGN_GROUP", "CAMPAIGN" (the default) or "CREATIVE". Leave it out when by is given.
object_idslist of textnononeReport only on these campaign groups or campaigns (ids from linkedin_ads_list, or their URNs; at most 50). For the creatives of one campaign: level "CREATIVE" and the campaign's URN here.
granularitytextno"ALL""ALL" (one row for the whole range), "DAILY", "MONTHLY" or "YEARLY".
bytextnononeWho saw it, one breakdown a report: job_function, seniority, industry, company_size, country, region, job_title or company. These figures are approximate, the top 100 values only, and a day behind.
metricslist of textnononeInstead of the default set, at most 18 of: spend, impressions, clicks, landing_page_clicks, leads, lead_form_opens, conversions, video_views, engagements, reach (ranges of 92 days or fewer, not with by; never add it up), qualified_leads, work_email_leads, post_click_conversions, post_view_conversions, conversion_value (not with by), video_starts, video_25pct, video_50pct, video_75pct, video_completions, reactions, comments, shares, follows, company_page_clicks, viral_impressions, viral_clicks, spend_usd.

linkedin_ads_get_delivery_status ​

Kind: read. It is marked as changing nothing.

Explain why a LinkedIn campaign group, campaign or creative is or is not being served: its status, each thing LinkedIn says is holding it in words and at which level (the ad account, the campaign group, the campaign or itself), the ad account's own holds, and for a creative its review status and LinkedIn's reasons for a rejection.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
leveltextyes"campaign_group", "campaign" or "creative" - what object_id is.
object_idtextyesFrom linkedin_ads_list.

linkedin_ads_search_targeting ​

Kind: read. It is marked as changing nothing.

Find the ids a LinkedIn campaign's targeting takes: job titles, job functions, seniorities, industries, company sizes, locations, skills, companies and languages. Each answer says which field of targeting its ids go in.

ArgumentTypeRequiredDefaultDescription
facettextyes"titles", "job_functions", "seniorities", "industries", "company_sizes", "locations", "skills", "companies" or "languages".
querytextnononeWhat to look for by name. Needed for titles, locations, skills and companies; optional for industries; left out for the others, which LinkedIn lists whole.
ad_account_idtextnononeOptional: the ad account the campaign is for.

linkedin_ads_audience_count ​

Kind: read. It is marked as changing nothing.

Count the LinkedIn members a targeting reaches, before a campaign is made with it: LinkedIn's own estimate, rounded (total), and the ones among them more likely to visit LinkedIn (active). LinkedIn reports 0 for any audience under 300 members, which is too small to run: say so, do not report it as nobody. Creates nothing.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
targetingTargetingyesLocations (at least one) and any of job_titles, job_functions, seniorities, industries, company_sizes, skills, companies, matched_audiences, with the same names under exclude. Ids from linkedin_ads_search_targeting.
languagetextno"en_US"The campaign's language as a locale, e.g. en_US or ar_AE.

linkedin_ads_preview ​

Kind: read. It is marked as changing nothing.

Get links that show a LinkedIn creative as it would appear in the feed, on desktop and on mobile. Show them to the user before the creative is switched on: this installation may refuse to activate a creative that the person activating it has not had previewed in the last 24 hours, and a preview from this tool is what counts.

A link works for about 3 hours; ask again for a fresh one. LinkedIn previews single image, carousel and video ads.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
creative_idtextyesFrom linkedin_ads_list (level "creative") or linkedin_ads_create_creative.

linkedin_ads_list_lead_forms ​

Kind: read. It is marked as changing nothing.

List a LinkedIn ad account's lead gen forms: each form's id, name, state (DRAFT, PUBLISHED, ARCHIVED), language, headline, questions and LinkedIn's review of it. The form_id is what linkedin_ads_create_creative takes as lead_form_id (a PUBLISHED form only) and linkedin_ads_get_leads reads from.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
include_archivedtrue or falsenofalseAlso show archived forms.
limitwhole numberno25Forms per page (1-100, default 25).
startwhole numberno0next_start from the previous page.

linkedin_ads_get_leads ​

Kind: read. It is marked as changing nothing.

Read the leads a LinkedIn lead gen form collected through the ad account's ads: each person's answers by question, when they sent them, and the campaign and creative they came from. One page per call.

A lead is a person's contact details. This works only where an administrator has allowed reading leads, for a person with write access whose LinkedIn connection holds r_marketing_leadgen_automation (LinkedIn's Lead Sync API) and who has a role on the ad account and on its company Page. Nothing is stored on this server: its activity log keeps where the leads were read from and how many. Call it only when the user asks for leads, show them to that user, and send them nowhere else unless the user asks for exactly that. The person is given as LinkedIn's URN; no name is looked up for it.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
form_idtextyesA lead gen form of that account, from linkedin_ads_list_lead_forms.
sincetextnononeOnly leads sent at or after this time, ISO 8601 with an offset, e.g. 2026-10-01T00:00:00+03:00. Without an offset it is read as UTC.
untiltextnononeOnly leads sent before this time.
limitwhole numberno25Leads per page (1-100, default 25).
startwhole numberno0next_start from the previous page.
form_versionwhole numbernononeA form changed after it was made has versions, and leads belong to the one they were sent to. The latest is read unless this names another.

linkedin_ads_list_conversions ​

Kind: read. It is marked as changing nothing.

List a LinkedIn ad account's conversions: the rules that say what LinkedIn counts as a result. Each has its id, name, type (LEAD, PURCHASE ...), method (insight_tag: a page of the website the Insight Tag reports; conversions_api: events sent with linkedin_ads_send_conversion_events), attribution windows, URL rules, the campaigns it is tied to (campaign_ids: LinkedIn attributes a conversion to those only) and when a page last matched it (fired: "seen within the hour", "not for 3 days", "never").

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.

linkedin_ads_insight_tag_status ​

Kind: read. It is marked as changing nothing.

Say whether a LinkedIn ad account's Insight Tag is working: the tag, and each website it has been seen on with when it last called back, in words ("seen within the hour", "not for 3 days", "never"). Use it before relying on a website conversion or a WEBSITE_CONVERSION campaign: without a tag that is seen, LinkedIn counts nothing on the website. The wording is this server's, from LinkedIn's own times.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.

linkedin_ads_list_audiences ​

Kind: read. It is marked as changing nothing.

List a LinkedIn ad account's matched audiences: the visitors of its website, lists of companies, lists of contacts, and audiences made elsewhere. Each has its kind, its status in words, its approximate size where LinkedIn gives one, and the campaigns that target or exclude it. targeting_id is what targeting.matched_audiences takes; audience_id is what linkedin_ads_upload_audience and linkedin_ads_delete_audience take, and only a list has one. LinkedIn serves a campaign to an audience only once it is READY with at least 300 members.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.

linkedin_ads_billing ​

Kind: read. It is marked as changing nothing.

What can be said of a LinkedIn ad account's standing: its status, anything LinkedIn says is holding it (a billing hold among them) in words, what it spent in a month, and each campaign group's total budget with what is left of it. Amounts are in the account's currency units.

LinkedIn's API exposes no balance, invoice or payment method: say so rather than guess. The spend is LinkedIn's reporting, not an invoice, and "left" is this server's arithmetic from it, never a figure of LinkedIn's.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
monthtextnononeYYYY-MM, in UTC. Left out, the current month so far.

linkedin_ads_set_status ​

Kind: write. It only previews the change unless dry_run is false. Removing needs confirm_remove to be true as well. Not offered while the server is in read-only mode.

Switch a LinkedIn campaign group, campaign or creative on or off, archive it or delete it. This is the only tool that can start spending: nothing else activates anything.

ACTIVE is checked against this installation's spending limits before it is sent. The dry run lists the budgets that would start spending, the most they could spend, the creatives that would run with LinkedIn's review of each, and what the ad account's active daily budgets would total. Under a campaign group or campaign that is not switched on, nothing starts and the preview says so. Show the user that and activate only after they confirm; never activate as a side effect of another request. PAUSED stops it and can be undone. ARCHIVED stops it and takes it out of the lists, keeping its results. DELETED cannot be undone and needs confirm_remove=true: prefer PAUSED or ARCHIVED unless the user asked for it to be deleted.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
leveltextyes"campaign_group", "campaign" or "creative" - what object_id is.
object_idtextyesFrom linkedin_ads_list.
statustextyes"ACTIVE", "PAUSED", "ARCHIVED" or "DELETED".
confirm_removetrue or falsenofalseMust be true to delete, and only when the user asked for a delete.
dry_runtrue or falsenotruetrue = this server checks the change and sends nothing (default); LinkedIn has not seen it. false = make it, only after the user confirms.

linkedin_ads_update_budget ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Change the budget, bid or end date of a LinkedIn campaign, or the total budget or end date of a campaign group. Amounts are in the ad account's currency units.

A budget stays the kind it is: a daily budget is changed where there is one, a total budget where there is one, and neither is added from here. Subject to this installation's limits for the account's currency: the highest daily and total budget, the highest bid, the largest increase in one call, the total of the account's active daily budgets, and the longest a campaign may run. A call over a limit is refused, not trimmed. This activates nothing.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
leveltextyes"campaign" or "campaign_group" - what object_id is.
object_idtextyesFrom linkedin_ads_list.
daily_budgetnumbernononeCampaign only: the new daily budget. LinkedIn may charge up to 150% of it on one day.
total_budgetnumbernononeThe new total budget, for a campaign or group that has one.
bidnumbernononeCampaign only: the manual bid, target cost or cost cap. Refused on a campaign that bids automatically.
end_datetextnononeWhen it stops, ISO 8601, e.g. 2026-11-30T21:00:00+03:00. A date alone is the start of that day in UTC, and it stops before it.
dry_runtrue or falsenotruetrue = this server checks the change and sends nothing (default); LinkedIn has not seen it. false = make it, only after the user confirms.

linkedin_ads_create_campaign_group ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Create a LinkedIn campaign group, which holds campaigns and may cap what they spend together. It is always created DRAFT (LinkedIn has no paused state for a new group): nothing in it is served until linkedin_ads_set_status switches it on.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
nametextyesThe group's name.
start_datetextnononeISO 8601, e.g. 2026-11-01T09:00:00+03:00. Now if left out.
end_datetextnononeWhen everything in the group stops. Needed with a total_budget; held to this installation's longest run.
total_budgetnumbernononeThe most the group's campaigns may spend together, in the ad account's currency units. Held to this installation's highest total budget.
dry_runtrue or falsenotruetrue = this server checks it and sends nothing (default); LinkedIn has not seen it. false = create it, only after the user confirms.

linkedin_ads_create_campaign ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Create a LinkedIn sponsored content campaign in a campaign group: who sees the ads, what LinkedIn optimises for, the bid, the budget and the schedule. Always created PAUSED. Amounts are in the ad account's currency units.

The dry run is this server's own check (LinkedIn has no validate-only mode, so never call it validated). Its preview carries the targeting as it will be sent, LinkedIn's count of the audience (0 means fewer than 300 members, too small to run) and the most the budget could spend. Show the user that before dry_run=false.

Which bid_strategy goes with which objective (anything else is refused):

  • BRAND_AWARENESS, WEBSITE_VISIT, ENGAGEMENT, VIDEO_VIEW: MAX_DELIVERY, COST_CAP, TARGET_COST or MANUAL.
  • LEAD_GENERATION: MAX_DELIVERY, COST_CAP or MANUAL. Never on the audience network.
  • WEBSITE_CONVERSION: MAX_DELIVERY or MANUAL.

VIDEO_VIEW runs as SINGLE_VIDEO only.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
campaign_group_idtextyesThe group it goes in, from linkedin_ads_list or linkedin_ads_create_campaign_group.
nametextyesThe campaign's name.
objectivetextyesBRAND_AWARENESS, WEBSITE_VISIT, ENGAGEMENT, VIDEO_VIEW, LEAD_GENERATION or WEBSITE_CONVERSION.
targetingTargetingyeslocations (required) and any of job_titles, job_functions, seniorities, industries, company_sizes, skills, companies, matched_audiences, with the same names under exclude. Ids come from linkedin_ads_search_targeting. Locations may be limited by this installation.
political_intenttextyesNOT_POLITICAL or POLITICAL. LinkedIn requires the advertiser to declare it: ask the user, never assume.
daily_budgetnumbernononeAverage daily budget. LinkedIn may charge up to 150% of it on one day.
total_budgetnumbernononeThe most the campaign may spend in all. By itself it needs an end_date.
start_datetextnononeISO 8601, e.g. 2026-11-01T09:00:00+03:00. Now if left out.
end_datetextnononeWhen it stops. This installation may require an end_date or a total_budget.
bid_strategytextno"MAX_DELIVERY"MAX_DELIVERY (LinkedIn bids, the default), COST_CAP (keep the average cost per result under bid), TARGET_COST (keep it around bid) or MANUAL (bid is the bid).
bidnumbernononeThe cost cap, target cost or manual bid. Needed with every strategy except MAX_DELIVERY, which takes none.
languagetextno"en_US"The campaign's language as a locale, e.g. en_US or ar_AE (facet languages of linkedin_ads_search_targeting). Members using LinkedIn in it are targeted.
formattextnononeSTANDARD_UPDATE (single image), CAROUSEL or SINGLE_VIDEO. Left out, LinkedIn takes it from the first creative; a carousel or video campaign must say it here.
organization_idtextnononeThe company Page the ads are for. Left out, the ad account's own, which is the only one accepted.
audience_networktrue or falsenofalseAlso run on other companies' apps and sites. Leave false unless the user asks; refused unless the administrator allows it.
audience_expansiontrue or falsenofalseLet LinkedIn go beyond the targeting to similar members. Leave false unless the user asks.
dry_runtrue or falsenotruetrue = this server checks it and sends nothing (default); LinkedIn has not seen it. false = create it, only after the user confirms.

linkedin_ads_create_creative ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Create a LinkedIn creative: the ad a campaign shows. Always created PAUSED, and LinkedIn reviews it from then on. It shows either a post the Page already has (post_urn), or a new post made with it (text and what goes with it), which appears on no Page - only as this ad - and is not one of the day's posts.

The dry run is this server's own check: LinkedIn has no validate-only mode and nothing is uploaded, so never call it validated. A creative cannot be edited afterwards; to change the ad make a new one. After creating, show the user linkedin_ads_preview, and switch it on with linkedin_ads_set_status only when they ask.

A new post is one of (the campaign's format must match):

  • an image: media_ids with one image. With link and headline it opens that page.
  • a link alone: link and headline.
  • a video: media_ids with one MP4, in a SINGLE_VIDEO campaign. link and call_to_action together add a button.
  • a document: media_ids with one PDF.
  • a carousel: carousel with 2 to 10 cards, in a CAROUSEL campaign.

The text is sent as plain text: hashtags work, nothing becomes a mention.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
campaign_idtextyesThe campaign it goes in, from linkedin_ads_list or linkedin_ads_create_campaign.
post_urntextnononeA post of the ad account's own Page to advertise, from linkedin_list_posts. Not with text.
texttextnononeThe text of a new post made for this ad. Not with post_urn.
media_idslist of textnononeOne library file for the new post, by media_id (meta_list_media). Uploaded to LinkedIn only when dry_run=false.
linktextnononeThe page a click opens, a whole https:// address. Not on a lead generation creative, whose button opens the form.
headlinetextnononeShown with the image, video, document or link. Needed with a link.
call_to_actiontextnononeThe button. With a link: APPLY, DOWNLOAD, VIEW_QUOTE, LEARN_MORE, SIGN_UP, SUBSCRIBE, REGISTER, JOIN, ATTEND, REQUEST_DEMO or SEE_MORE. On a lead generation creative (required): those except SEE_MORE, or UNLOCK_FULL_DOCUMENT.
carousellist of CarouselCardnononeThe cards of a carousel: each {media_id, headline, link}, the media an image from the library.
lead_form_idtextnononeRequired in a LEAD_GENERATION campaign: the ad account's own published lead gen form the button opens.
nametextnononeA name for the creative, for people to find it by in Campaign Manager.
dry_runtrue or falsenotruetrue = this server checks it and sends nothing (default); LinkedIn has not seen it. false = create it, only after the user confirms.

linkedin_ads_boost_post ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Advertise a post the LinkedIn Page already has: makes a campaign and a creative that shows the post, in one step, both PAUSED - nothing is shown or spent until they are switched on with linkedin_ads_set_status, which checks the spending limits. Without campaign_group_id it also makes a campaign group for them, DRAFT.

The ad is the post itself. The campaign is held to everything linkedin_ads_create_campaign is: the objective and bid_strategy must be a pair LinkedIn offers, the budget and bid are under this installation's limits, and it needs an end_date or a total_budget where the installation limits how long one may run. The dry run is this server's own check (LinkedIn has no validate-only mode, so never call it validated); its preview shows the post, the targeting, LinkedIn's count of the audience and the most the budget could spend. If LinkedIn refuses a step when applying, what this call had made is removed again. Amounts are in the ad account's currency units.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
post_urntextyesA post of the ad account's own Page, from linkedin_list_posts.
objectivetextyesBRAND_AWARENESS, WEBSITE_VISIT, ENGAGEMENT, VIDEO_VIEW (a video post only) or WEBSITE_CONVERSION. Not LEAD_GENERATION, which needs a lead gen form: use linkedin_ads_create_campaign and linkedin_ads_create_creative for that.
targetingTargetingyeslocations (required) and any of job_titles, job_functions, seniorities, industries, company_sizes, skills, companies, matched_audiences, with the same names under exclude. Ids come from linkedin_ads_search_targeting.
political_intenttextyesNOT_POLITICAL or POLITICAL. LinkedIn requires the advertiser to declare it: ask the user, never assume.
campaign_group_idtextnononeThe group the campaign goes in, from linkedin_ads_list. Left out, a new DRAFT group is made, which has to be switched on as well.
daily_budgetnumbernononeAverage daily budget. LinkedIn may charge up to 150% of it on one day.
total_budgetnumbernononeThe most the campaign may spend in all. By itself it needs an end_date.
start_datetextnononeISO 8601, e.g. 2026-11-01T09:00:00+03:00. Now if left out.
end_datetextnononeWhen it stops. This installation may require an end_date or a total_budget.
bid_strategytextno"MAX_DELIVERY"MAX_DELIVERY (LinkedIn bids, the default), COST_CAP, TARGET_COST or MANUAL, as for linkedin_ads_create_campaign.
bidnumbernononeThe cost cap, target cost or manual bid. Needed with every strategy except MAX_DELIVERY, which takes none.
languagetextno"en_US"The campaign's language as a locale, e.g. en_US or ar_AE.
nametextnononeWhat to call the campaign, the creative and a group made here. A name is made if left out.
dry_runtrue or falsenotruetrue = this server checks it and sends nothing (default); LinkedIn has not seen it. false = create it all, not running, only after the user confirms.

linkedin_ads_create_lead_form ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Create a LinkedIn lead gen form: the form a lead generation ad's button opens, on LinkedIn, in place of a website. Always created DRAFT. Publish it with linkedin_ads_set_lead_form_status, then give its id to linkedin_ads_create_creative as lead_form_id.

The dry run is this server's own preflight: LinkedIn has no validate-only mode and has not seen the form, so do not call it validated.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
nametextyesThe form's name, seen only by the people who manage the ad account.
headlinetextyesWhat the member reads at the top of the form.
questionslist of QuestionyesWhat the form asks, in order. Each is {"predefined": ...} for a field LinkedIn fills in from the member's profile (FIRST_NAME, LAST_NAME, EMAIL, WORK_EMAIL, PHONE_NUMBER, JOB_TITLE, COMPANY_NAME, COMPANY_SIZE, INDUSTRY, COUNTRY, CITY and others), or {"label": ...} for a question of your own, with "options" (2 to 15) to make it multiple choice. "required": false makes one optional. On a form that is not in English every question needs its label.
privacy_policy_urltextyesThe advertiser's privacy policy, a whole https:// address.
descriptiontextnononeOne or two sentences under the headline.
thank_you_messagetextnononeWhat is shown after the form is sent. Needs landing_url.
landing_urltextnononeThe page the button under the thank-you message opens.
thank_you_buttontextno"VISIT_COMPANY_WEBSITE"That button's label: VISIT_COMPANY_WEBSITE (default), LEARN_MORE, VIEW_NOW or TRY_NOW.
languagetextno"en_US"The form's language as a locale, e.g. en_US or ar_AE. LinkedIn uses a form that is not in English only in campaigns of the same language.
dry_runtrue or falsenotruetrue = check here without sending anything (default). false = create it, only after the user confirms.

linkedin_ads_set_lead_form_status ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Publish a LinkedIn lead gen form, or archive one. Publishing is what lets an ad open the form, and once an ad uses it its questions can no longer be changed: show the user the questions (linkedin_ads_list_lead_forms) before publishing. An archived form is not shown, nor is a creative that opens it, so pause those creatives first. LinkedIn has no delete for a form, and none is offered here.

The dry run is this server's own preflight: nothing is sent to LinkedIn.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesThe ad account the form is in.
form_idtextyesFrom linkedin_ads_list_lead_forms.
statustextyes"PUBLISHED" or "ARCHIVED".
dry_runtrue or falsenotruetrue = preflight only (default). false = change it, after the user confirms.

linkedin_ads_create_conversion ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Create a LinkedIn conversion: a rule that says what counts as a result. It spends nothing. LinkedIn attributes a conversion only to the campaigns tied to its rule, so name the campaigns: they are read first and must be the ad account's own.

The dry run is this server's own preflight: LinkedIn has no validate-only mode and has not seen the conversion, so do not call it validated.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
nametextyesThe conversion's name, as reports show it.
typetextyesWhat is counted: LEAD, PURCHASE, SIGN_UP, KEY_PAGE_VIEW, DOWNLOAD, ADD_TO_CART, INSTALL, OTHER, QUALIFIED_LEAD, BOOK_APPOINTMENT, REQUEST_QUOTE, CONTACT, START_TRIAL, SUBSCRIBE and others; an unknown one is refused with the whole list.
methodtextyes"insight_tag" (a page of the website, reported by the Insight Tag) or "conversions_api" (events sent with linkedin_ads_send_conversion_events).
url_ruleslist of UrlRulenononeinsight_tag only. Conditions on the page's address, all of which must hold: each {"match": "EXACT" | "STARTS_WITH" | "CONTAINS", "value": "www.example.com/thank-you"}. Left out, the conversion counts only when the website calls the tag with this conversion's id.
valuenumbernononeA fixed value for every conversion, in the ad account's currency. Left out, a conversion is worth what its event says.
click_window_dayswhole numberno30How long after a click a conversion still counts: 1, 7 or 30 (default), and 90 for conversions_api (180 or 365 for LEAD, QUALIFIED_LEAD, PURCHASE, ADD_TO_CART and SUBMIT_APPLICATION sent that way).
view_window_dayswhole numberno7The same after an ad was only seen. Default 7.
campaign_idslist of textnononeCampaigns of this ad account to tie the conversion to (up to 25).
dry_runtrue or falsenotruetrue = check here without sending anything (default). false = create it, only after the user confirms.

linkedin_ads_set_conversion_campaigns ​

Kind: write. It only previews the change unless dry_run is false. Removing needs confirm_remove to be true as well. Not offered while the server is in read-only mode.

Tie a LinkedIn conversion that already exists to campaigns of the same ad account, or untie it from some. LinkedIn attributes a conversion only to the campaigns tied to its rule, so a campaign made or copied after the rule counts nothing for it until it is tied here. Only the tie changes: not the rule, not a campaign, and nothing is spent.

The conversion and every campaign are read first and must be the ad account's own. A campaign already tied (or, for a removal, not tied) is left as it is and said so. Untying stops LinkedIn counting the conversion for that campaign and needs confirm_remove=true. The dry run is this server's own preflight: LinkedIn has no validate-only mode and has not seen the change, so do not call it validated.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
conversion_idtextyesFrom linkedin_ads_list_conversions, which also shows the campaigns each conversion is tied to now (campaign_ids).
add_campaign_idslist of textnononeCampaigns of this ad account to tie the conversion to.
remove_campaign_idslist of textnononeCampaigns to untie it from. Up to 25 campaigns a call in all.
confirm_removetrue or falsenofalseMust be true to untie, and only when the user asked for it.
dry_runtrue or falsenotruetrue = check here without sending anything (default). false = change the ties, only after the user confirms.

linkedin_ads_send_conversion_events ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Send conversions from the advertiser's own records (a CRM, a sales sheet) to a LinkedIn conversion whose method is conversions_api, so LinkedIn can count them for the campaigns tied to it.

hashed=true keeps plain contact details out of this conversation altogether: give email, first_name and last_name already SHA-256 hashed (lowercase, no spaces) and they are checked to be hashes and passed on. Otherwise they are normalised and hashed on this server before they are sent. Either way nothing of a row is stored: the activity log keeps how many rows went in, how many were sent or left out and why, and a file's hash and size. These are people's contact details: send them only when the user asks, and never repeat them elsewhere.

Sending the same events twice may count them twice: LinkedIn documents no removal of a duplicate sent this way. Give each event its own event_id where the user's records have one; a file already sent to the conversion from here is refused unless resend=true; a list given in events cannot be recognised again, so never send one a second time without the user saying so.

Works only where an administrator has allowed sending conversions, for a person with write access whose LinkedIn connection holds rw_conversions (LinkedIn's Conversions API). The dry run is this server's own preflight: nothing is sent, and LinkedIn has validated nothing.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
conversion_idtextyesA conversions_api conversion of that account, from linkedin_ads_list_conversions.
eventslist of objectnononeUp to 2,000 rows in the call, each {"email", "happened_at", "value"?, "currency"?, "event_id"?, "first_name"?, "last_name"?, "company"?, "title"?, "country"?}. A row needs an email, or a first and a last name. happened_at is ISO 8601 with an offset (2026-10-01T09:30:00+03:00; without one it is UTC) and within the last 90 days: an older row refuses the call by its number. value is in currency, else the ad account's currency. company, title and country (two letters) are sent as they are, and only beside both names.
pathtextnononeInstead of events: a UTF-8 CSV with those columns in its first row, inside one of the server's data folders (server_status lists them).
hashedtrue or falsenofalseThe email and names are SHA-256 hashes already.
resendtrue or falsenofalseSend a file again that was already sent to this conversion from here.
dry_runtrue or falsenotruetrue = preflight only (default). false = send, after the user confirms.

linkedin_ads_create_audience ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Create a LinkedIn matched audience, for a campaign to target or exclude. It spends nothing. There is no lookalike audience: LinkedIn's API has none.

Works only where an administrator has allowed matched audiences, for a person with write access whose LinkedIn connection holds rw_dmp_segments (LinkedIn's Matched Audiences API). The dry run is this server's own preflight: LinkedIn has no validate-only mode and has not seen the audience, so do not call it validated.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
nametextyesThe audience's name, as Campaign Manager shows it.
kindtextyes"website" (members who visit pages of the website, from now on; refused when the account's Insight Tag has never been seen, and it cannot be deleted from here), "companies" or "contacts" (an empty list, filled with linkedin_ads_upload_audience).
url_ruleslist of UrlRulenononewebsite only, and required there. A visit to a page that matches any one rule counts: each {"match": "EXACT" | "STARTS_WITH" | "CONTAINS", "value": "www.example.com/pricing"}.
dry_runtrue or falsenotruetrue = check here without sending anything (default). false = create it, only after the user confirms.

linkedin_ads_upload_audience ​

Kind: write. It only previews the change unless dry_run is false. Removing needs confirm_remove to be true as well. Not offered while the server is in read-only mode.

Add rows to a LinkedIn contact list or company list, or take them out. The list's own kind says what a row is.

A contact row is a person. Its email is normalised and SHA-256 hashed on this server before it is sent; hashed=true says the emails are hashes already, which keeps plain addresses out of this conversation. LinkedIn takes a name, a job title and a company only as plain text, so those go as they are when a row gives them: leave them out to send hashes alone. Nothing of a row is stored: the activity log keeps how many rows went in, how many were sent or left out and why, and a file's hash and size. Send people's details only when the user asks, and never repeat them elsewhere.

A company row is business data and goes as it is.

Adding a row already in the list changes nothing. LinkedIn takes up to 48 hours to match a new list and serves it only once it has 300 members. The dry run is this server's own preflight: nothing is sent, and LinkedIn has validated nothing.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
audience_idtextyesA contacts or companies list of that account: its audience_id from linkedin_ads_list_audiences (not its targeting_id).
rowslist of objectnononeUp to 2,000 rows in the call. For a contact list each {"email", "first_name"?, "last_name"?, "title"?, "company"?, "country"?}: a row needs an email, or a first and a last name. For a company list each {"company"?, "domain"?, "email_domain"?, "page_url"?, "country"?}: a row needs the company's name, its website (domain), its email domain or its LinkedIn page (linkedin.com/company/...). country is two letters.
pathtextnononeInstead of rows: a UTF-8 CSV with those columns in its first row, inside one of the server's data folders (server_status lists them).
hashedtrue or falsenofalseContact lists only: the emails are SHA-256 hashes already.
modetextno"add""add" (default) or "remove". A row is removed only when it matches what was added, so send the same fields.
confirm_removetrue or falsenofalseMust be true to remove rows, and only when the user asked for it.
dry_runtrue or falsenotruetrue = preflight only (default). false = send, after the user confirms.

linkedin_ads_delete_audience ​

Kind: write. It only previews the change unless dry_run is false. Removing needs confirm_remove to be true as well. Not offered while the server is in read-only mode.

Delete a LinkedIn contact list or company list, with every row sent to it and the audience LinkedIn made of it. It cannot be undone. Refused while an active campaign targets or excludes the audience: pause those campaigns or change their targeting first. A website audience cannot be deleted from here (LinkedIn's API has no delete for one): archive it in Campaign Manager.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
audience_idtextyesThe list's audience_id from linkedin_ads_list_audiences.
confirm_removetrue or falsenofalseMust be true to delete, and only when the user asked for a delete.
dry_runtrue or falsenotruetrue = check here without sending anything (default). false = delete it, only after the user confirms.

linkedin_ads_update_campaign ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Change a LinkedIn campaign's name, who it reaches, when it ends, or whether LinkedIn may go beyond its targeting. It changes no status, no budget and no bid: those stay with linkedin_ads_set_status and linkedin_ads_update_budget. The objective, the format and the Page are fixed when a campaign is made.

A targeting replaces the campaign's targeting whole: give everything it should keep, not only what changes. The dry run shows LinkedIn's count of the audience before and after (0 means fewer than 300 members, too small to run). On a campaign that is switched on, the change decides who sees its ads at once.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
campaign_idtextyesFrom linkedin_ads_list.
nametextnononeThe campaign's new name.
targetingTargetingnononeThe whole new targeting: locations (required) and any of job_titles, job_functions, seniorities, industries, company_sizes, skills, companies, matched_audiences, with the same names under exclude. Ids come from linkedin_ads_search_targeting.
end_datetextnononeWhen it stops, ISO 8601, e.g. 2026-11-30T21:00:00+03:00. A later end is held to this installation's longest run.
audience_expansiontrue or falsenononetrue lets LinkedIn go beyond the targeting to similar members; false stops it. Leave it out unless the user asks.
dry_runtrue or falsenotruetrue = this server checks the change and sends nothing (default); LinkedIn has not seen it. false = make it, only after the user confirms.

linkedin_ads_duplicate_campaign ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Copy a LinkedIn sponsored content campaign: a new campaign with the source's objective, bidding, budgets, language, format and targeting, always PAUSED, and with with_creatives a new PAUSED creative for each post the source's creatives show. Nothing is shown or spent until linkedin_ads_set_status switches it on.

LinkedIn has no copy of its own, so the copy is made by the rules of linkedin_ads_create_campaign: its budgets and bid are held to this installation's limits, it needs an end date or a total budget where the installation limits how long a campaign may run, and a campaign whose targeting or bidding this server does not build is refused rather than copied without it. The copy starts now; what the source was given only in Campaign Manager, and the conversions tied to it, are not copied. The dry run is this server's own check (never call it validated).

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
campaign_idtextyesThe campaign to copy, from linkedin_ads_list.
nametextnononeThe copy's name. Left out, the source's with "- Copy".
with_creativestrue or falsenotrueAlso make the source's creatives again in the copy (25 at most).
campaign_group_idtextnononeThe group the copy goes in. Left out, the source's.
end_datetextnononeWhen the copy stops, ISO 8601. Left out, the source's end date when that is still ahead.
political_intenttextnononeNOT_POLITICAL or POLITICAL. Needed only when the source declared neither: ask the user, never assume.
dry_runtrue or falsenotruetrue = this server checks it and sends nothing (default); LinkedIn has not seen it. false = make the copy, not running, only after the user confirms.

linkedin_ads_bulk_update ​

Kind: write. It only previews the change unless dry_run is false. Not offered while the server is in read-only mode.

Pause or archive several LinkedIn campaign groups, campaigns or creatives, or change several budgets, bids or end dates, in one call (25 at most). Each item is checked and recorded exactly as linkedin_ads_set_status or linkedin_ads_update_budget would do it alone, and one that is refused does not stop the others.

It never switches anything on and never deletes: ACTIVE and DELETED are refused here, because each of those is its own call to linkedin_ads_set_status, confirmed by the user.

ArgumentTypeRequiredDefaultDescription
ad_account_idtextyesFrom linkedin_ads_list_accounts.
leveltextyes"campaign_group", "campaign" or "creative" - what every object_id is.
itemslist of BulkItemyesEach {object_id, and either status ("PAUSED" or "ARCHIVED") or any of daily_budget, total_budget, bid, end_date}. Amounts in the account's currency units; a creative takes a status only.
dry_runtrue or falsenotruetrue = this server checks every item and sends nothing (default). false = make the changes, only after the user confirms.

Objects the arguments take ​

An argument whose type is a name takes an object with these fields.

Targeting ​

Who sees a LinkedIn campaign. A member must match every field given, and any one value within a field. Ids come from linkedin_ads_search_targeting.

FieldTypeRequiredDefaultDescription
locationslist of text or whole number (at least 1 items)yesGeo ids (facet locations). At least one. This installation may limit which.
job_titleslist of text or whole numbernoNot together with job_functions or seniorities.
job_functionslist of text or whole numberno
senioritieslist of text or whole numberno
industrieslist of text or whole numberno
company_sizeslist of text or whole numbernoRanges of employees: "1", "2-10", "11-50", "51-200", "201-500", "501-1000", "1001-5000", "5001-10000", "10001+".
skillslist of text or whole numberno
companieslist of text or whole numbernoOrganization ids of employers. Not together with industries or company_sizes.
matched_audienceslist of text or whole numbernoAudiences of this ad account: the targeting_id of each, from linkedin_ads_list_audiences.
excludeExcludednonone

CarouselCard ​

One card of a carousel ad: an image from the caller's library, its headline, and the page a click on it opens.

FieldTypeRequiredDefaultDescription
media_idtextyes
headlinetextyes
linktextyes

Question ​

One question of a lead gen form.

FieldTypeRequiredDefaultDescription
predefinedtextnononeA field LinkedIn fills in from the member's profile: FIRST_NAME, LAST_NAME, EMAIL, WORK_EMAIL, PHONE_NUMBER, WORK_PHONE_NUMBER, LINKEDIN_PROFILE_LINK, JOB_TITLE, JOB_FUNCTION, SENIORITY, COMPANY_NAME, COMPANY_SIZE, INDUSTRY, CITY, STATE, COUNTRY, ZIP_CODE, DEGREE, FIELD_OF_STUDY, SCHOOL, START_DATE, GRADUATION_DATE or GENDER. Leave out for a question of your own.
labeltextnononeThe question as the member reads it. Required for a question of your own, and for a predefined field on a form that is not in English; an English form words a predefined field itself.
optionslist of textnononeA question of your own only: 2 to 15 answers to choose from. Left out, the member types a short answer.
requiredtrue or falsenotrueWhether the form can be sent without an answer to it.

UrlRule ​

One condition on the address of a page that counts as the conversion.

FieldTypeRequiredDefaultDescription
matchtextyesEXACT (the whole address), STARTS_WITH or CONTAINS.
valuetextyesThe address or part of one, without https://, e.g. www.example.com/thank-you. No wildcards or regular expressions. CONTAINS alone takes alternatives: 'example.com/order OR example.com/checkout'.

BulkItem ​

One change to one object: a status, or a budget, bid or end date.

FieldTypeRequiredDefaultDescription
object_idtextyes
statustextnononePAUSED or ARCHIVED.
daily_budgetnumbernononeCampaigns only.
total_budgetnumbernonone
bidnumbernononeCampaigns only.
end_datetextnononeISO 8601 with an offset.

Excluded ​

Who is left out. Anyone matching any one of these is excluded.

FieldTypeRequiredDefaultDescription
locationslist of text or whole numberno
job_titleslist of text or whole numberno
job_functionslist of text or whole numberno
senioritieslist of text or whole numberno
industrieslist of text or whole numberno
company_sizeslist of text or whole numberno
skillslist of text or whole numberno
companieslist of text or whole numberno
matched_audienceslist of text or whole numberno