أدوات LinkedIn Ads
في هذه الصفحة 30 أداة. هذه الصفحة مولَّدة آليًا من قائمة الأدوات في الخادم نفسه، الإصدار 0.1.0، ولا تُحرَّر باليد. أوصاف الأدوات مكتوبة للمساعد الذكي، وهي بالإنجليزية ولم تُترجم، فكل ما تحت هذه الفقرة بالإنجليزية كما يقرؤه المساعد الذكي. لا تحتاج إلى معرفة اسم أي أداة لتطلب عملًا: هذه الصفحة مرجع لمن يريد أن يعرف ما تأخذه كل أداة بالضبط. صفحة كل الأدوات تسرد الصفحات كلها.
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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
level | text | no | "campaign" | "campaign_group", "campaign" or "creative". |
parent_id | text | no | none | Only the campaigns of this campaign group, or the creatives of this campaign. |
statuses | list of text | no | none | Statuses to include, e.g. ["ACTIVE"]. Left out, everything except ARCHIVED, CANCELED, PENDING_DELETION and REMOVED; name those to see them. |
limit | whole number | no | 50 | Rows per page (1-100). |
page_token | text | no | none | next_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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
since | text | yes | First day, YYYY-MM-DD, in UTC. | |
until | text | no | none | Last day, YYYY-MM-DD, included. Left out, today. |
level | text | no | none | One row per "ACCOUNT", "CAMPAIGN_GROUP", "CAMPAIGN" (the default) or "CREATIVE". Leave it out when by is given. |
object_ids | list of text | no | none | Report 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. |
granularity | text | no | "ALL" | "ALL" (one row for the whole range), "DAILY", "MONTHLY" or "YEARLY". |
by | text | no | none | Who 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. |
metrics | list of text | no | none | Instead 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
level | text | yes | "campaign_group", "campaign" or "creative" - what object_id is. | |
object_id | text | yes | From 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
facet | text | yes | "titles", "job_functions", "seniorities", "industries", "company_sizes", "locations", "skills", "companies" or "languages". | |
query | text | no | none | What 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_id | text | no | none | Optional: 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
targeting | Targeting | yes | Locations (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. | |
language | text | no | "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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
creative_id | text | yes | From 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
include_archived | true or false | no | false | Also show archived forms. |
limit | whole number | no | 25 | Forms per page (1-100, default 25). |
start | whole number | no | 0 | next_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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
form_id | text | yes | A lead gen form of that account, from linkedin_ads_list_lead_forms. | |
since | text | no | none | Only 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. |
until | text | no | none | Only leads sent before this time. |
limit | whole number | no | 25 | Leads per page (1-100, default 25). |
start | whole number | no | 0 | next_start from the previous page. |
form_version | whole number | no | none | A 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").
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
month | text | no | none | YYYY-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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
level | text | yes | "campaign_group", "campaign" or "creative" - what object_id is. | |
object_id | text | yes | From linkedin_ads_list. | |
status | text | yes | "ACTIVE", "PAUSED", "ARCHIVED" or "DELETED". | |
confirm_remove | true or false | no | false | Must be true to delete, and only when the user asked for a delete. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
level | text | yes | "campaign" or "campaign_group" - what object_id is. | |
object_id | text | yes | From linkedin_ads_list. | |
daily_budget | number | no | none | Campaign only: the new daily budget. LinkedIn may charge up to 150% of it on one day. |
total_budget | number | no | none | The new total budget, for a campaign or group that has one. |
bid | number | no | none | Campaign only: the manual bid, target cost or cost cap. Refused on a campaign that bids automatically. |
end_date | text | no | none | When 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_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
name | text | yes | The group's name. | |
start_date | text | no | none | ISO 8601, e.g. 2026-11-01T09:00:00+03:00. Now if left out. |
end_date | text | no | none | When everything in the group stops. Needed with a total_budget; held to this installation's longest run. |
total_budget | number | no | none | The most the group's campaigns may spend together, in the ad account's currency units. Held to this installation's highest total budget. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
campaign_group_id | text | yes | The group it goes in, from linkedin_ads_list or linkedin_ads_create_campaign_group. | |
name | text | yes | The campaign's name. | |
objective | text | yes | BRAND_AWARENESS, WEBSITE_VISIT, ENGAGEMENT, VIDEO_VIEW, LEAD_GENERATION or WEBSITE_CONVERSION. | |
targeting | Targeting | yes | 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. Locations may be limited by this installation. | |
political_intent | text | yes | NOT_POLITICAL or POLITICAL. LinkedIn requires the advertiser to declare it: ask the user, never assume. | |
daily_budget | number | no | none | Average daily budget. LinkedIn may charge up to 150% of it on one day. |
total_budget | number | no | none | The most the campaign may spend in all. By itself it needs an end_date. |
start_date | text | no | none | ISO 8601, e.g. 2026-11-01T09:00:00+03:00. Now if left out. |
end_date | text | no | none | When it stops. This installation may require an end_date or a total_budget. |
bid_strategy | text | no | "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). |
bid | number | no | none | The cost cap, target cost or manual bid. Needed with every strategy except MAX_DELIVERY, which takes none. |
language | text | no | "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. |
format | text | no | none | STANDARD_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_id | text | no | none | The company Page the ads are for. Left out, the ad account's own, which is the only one accepted. |
audience_network | true or false | no | false | Also run on other companies' apps and sites. Leave false unless the user asks; refused unless the administrator allows it. |
audience_expansion | true or false | no | false | Let LinkedIn go beyond the targeting to similar members. Leave false unless the user asks. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
campaign_id | text | yes | The campaign it goes in, from linkedin_ads_list or linkedin_ads_create_campaign. | |
post_urn | text | no | none | A post of the ad account's own Page to advertise, from linkedin_list_posts. Not with text. |
text | text | no | none | The text of a new post made for this ad. Not with post_urn. |
media_ids | list of text | no | none | One library file for the new post, by media_id (meta_list_media). Uploaded to LinkedIn only when dry_run=false. |
link | text | no | none | The page a click opens, a whole https:// address. Not on a lead generation creative, whose button opens the form. |
headline | text | no | none | Shown with the image, video, document or link. Needed with a link. |
call_to_action | text | no | none | The 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. |
carousel | list of CarouselCard | no | none | The cards of a carousel: each {media_id, headline, link}, the media an image from the library. |
lead_form_id | text | no | none | Required in a LEAD_GENERATION campaign: the ad account's own published lead gen form the button opens. |
name | text | no | none | A name for the creative, for people to find it by in Campaign Manager. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
post_urn | text | yes | A post of the ad account's own Page, from linkedin_list_posts. | |
objective | text | yes | BRAND_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. | |
targeting | Targeting | yes | 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. | |
political_intent | text | yes | NOT_POLITICAL or POLITICAL. LinkedIn requires the advertiser to declare it: ask the user, never assume. | |
campaign_group_id | text | no | none | The 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_budget | number | no | none | Average daily budget. LinkedIn may charge up to 150% of it on one day. |
total_budget | number | no | none | The most the campaign may spend in all. By itself it needs an end_date. |
start_date | text | no | none | ISO 8601, e.g. 2026-11-01T09:00:00+03:00. Now if left out. |
end_date | text | no | none | When it stops. This installation may require an end_date or a total_budget. |
bid_strategy | text | no | "MAX_DELIVERY" | MAX_DELIVERY (LinkedIn bids, the default), COST_CAP, TARGET_COST or MANUAL, as for linkedin_ads_create_campaign. |
bid | number | no | none | The cost cap, target cost or manual bid. Needed with every strategy except MAX_DELIVERY, which takes none. |
language | text | no | "en_US" | The campaign's language as a locale, e.g. en_US or ar_AE. |
name | text | no | none | What to call the campaign, the creative and a group made here. A name is made if left out. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
name | text | yes | The form's name, seen only by the people who manage the ad account. | |
headline | text | yes | What the member reads at the top of the form. | |
questions | list of Question | yes | What 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_url | text | yes | The advertiser's privacy policy, a whole https:// address. | |
description | text | no | none | One or two sentences under the headline. |
thank_you_message | text | no | none | What is shown after the form is sent. Needs landing_url. |
landing_url | text | no | none | The page the button under the thank-you message opens. |
thank_you_button | text | no | "VISIT_COMPANY_WEBSITE" | That button's label: VISIT_COMPANY_WEBSITE (default), LEARN_MORE, VIEW_NOW or TRY_NOW. |
language | text | no | "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_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | The ad account the form is in. | |
form_id | text | yes | From linkedin_ads_list_lead_forms. | |
status | text | yes | "PUBLISHED" or "ARCHIVED". | |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
name | text | yes | The conversion's name, as reports show it. | |
type | text | yes | What 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. | |
method | text | yes | "insight_tag" (a page of the website, reported by the Insight Tag) or "conversions_api" (events sent with linkedin_ads_send_conversion_events). | |
url_rules | list of UrlRule | no | none | insight_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. |
value | number | no | none | A fixed value for every conversion, in the ad account's currency. Left out, a conversion is worth what its event says. |
click_window_days | whole number | no | 30 | How 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_days | whole number | no | 7 | The same after an ad was only seen. Default 7. |
campaign_ids | list of text | no | none | Campaigns of this ad account to tie the conversion to (up to 25). |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
conversion_id | text | yes | From linkedin_ads_list_conversions, which also shows the campaigns each conversion is tied to now (campaign_ids). | |
add_campaign_ids | list of text | no | none | Campaigns of this ad account to tie the conversion to. |
remove_campaign_ids | list of text | no | none | Campaigns to untie it from. Up to 25 campaigns a call in all. |
confirm_remove | true or false | no | false | Must be true to untie, and only when the user asked for it. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
conversion_id | text | yes | A conversions_api conversion of that account, from linkedin_ads_list_conversions. | |
events | list of object | no | none | Up 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. |
path | text | no | none | Instead 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). |
hashed | true or false | no | false | The email and names are SHA-256 hashes already. |
resend | true or false | no | false | Send a file again that was already sent to this conversion from here. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
name | text | yes | The audience's name, as Campaign Manager shows it. | |
kind | text | yes | "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_rules | list of UrlRule | no | none | website 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_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
audience_id | text | yes | A contacts or companies list of that account: its audience_id from linkedin_ads_list_audiences (not its targeting_id). | |
rows | list of object | no | none | Up 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. |
path | text | no | none | Instead 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). |
hashed | true or false | no | false | Contact lists only: the emails are SHA-256 hashes already. |
mode | text | no | "add" | "add" (default) or "remove". A row is removed only when it matches what was added, so send the same fields. |
confirm_remove | true or false | no | false | Must be true to remove rows, and only when the user asked for it. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
audience_id | text | yes | The list's audience_id from linkedin_ads_list_audiences. | |
confirm_remove | true or false | no | false | Must be true to delete, and only when the user asked for a delete. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
campaign_id | text | yes | From linkedin_ads_list. | |
name | text | no | none | The campaign's new name. |
targeting | Targeting | no | none | The 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_date | text | no | none | When 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_expansion | true or false | no | none | true lets LinkedIn go beyond the targeting to similar members; false stops it. Leave it out unless the user asks. |
dry_run | true or false | no | true | true = 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).
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
campaign_id | text | yes | The campaign to copy, from linkedin_ads_list. | |
name | text | no | none | The copy's name. Left out, the source's with "- Copy". |
with_creatives | true or false | no | true | Also make the source's creatives again in the copy (25 at most). |
campaign_group_id | text | no | none | The group the copy goes in. Left out, the source's. |
end_date | text | no | none | When the copy stops, ISO 8601. Left out, the source's end date when that is still ahead. |
political_intent | text | no | none | NOT_POLITICAL or POLITICAL. Needed only when the source declared neither: ask the user, never assume. |
dry_run | true or false | no | true | true = 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.
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
ad_account_id | text | yes | From linkedin_ads_list_accounts. | |
level | text | yes | "campaign_group", "campaign" or "creative" - what every object_id is. | |
items | list of BulkItem | yes | Each {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_run | true or false | no | true | true = 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.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
locations | list of text or whole number (at least 1 items) | yes | Geo ids (facet locations). At least one. This installation may limit which. | |
job_titles | list of text or whole number | no | Not together with job_functions or seniorities. | |
job_functions | list of text or whole number | no | ||
seniorities | list of text or whole number | no | ||
industries | list of text or whole number | no | ||
company_sizes | list of text or whole number | no | Ranges of employees: "1", "2-10", "11-50", "51-200", "201-500", "501-1000", "1001-5000", "5001-10000", "10001+". | |
skills | list of text or whole number | no | ||
companies | list of text or whole number | no | Organization ids of employers. Not together with industries or company_sizes. | |
matched_audiences | list of text or whole number | no | Audiences of this ad account: the targeting_id of each, from linkedin_ads_list_audiences. | |
exclude | Excluded | no | none |
CarouselCard
One card of a carousel ad: an image from the caller's library, its headline, and the page a click on it opens.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
media_id | text | yes | ||
headline | text | yes | ||
link | text | yes |
Question
One question of a lead gen form.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
predefined | text | no | none | A 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. |
label | text | no | none | The 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. |
options | list of text | no | none | A question of your own only: 2 to 15 answers to choose from. Left out, the member types a short answer. |
required | true or false | no | true | Whether the form can be sent without an answer to it. |
UrlRule
One condition on the address of a page that counts as the conversion.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
match | text | yes | EXACT (the whole address), STARTS_WITH or CONTAINS. | |
value | text | yes | The 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.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
object_id | text | yes | ||
status | text | no | none | PAUSED or ARCHIVED. |
daily_budget | number | no | none | Campaigns only. |
total_budget | number | no | none | |
bid | number | no | none | Campaigns only. |
end_date | text | no | none | ISO 8601 with an offset. |
Excluded
Who is left out. Anyone matching any one of these is excluded.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
locations | list of text or whole number | no | ||
job_titles | list of text or whole number | no | ||
job_functions | list of text or whole number | no | ||
seniorities | list of text or whole number | no | ||
industries | list of text or whole number | no | ||
company_sizes | list of text or whole number | no | ||
skills | list of text or whole number | no | ||
companies | list of text or whole number | no | ||
matched_audiences | list of text or whole number | no |