LinkedIn Ads Write
⚠️ STOP - DO NOT CALL THIS TOOL DIRECTLY! This tool creates REAL LinkedIn campaigns that cost REAL money
POST https://api.adspirer.ai/api/v1/tools/create_linkedin_image_campaign/execute
Authorization: Bearer sk_live_... — your Adspirer API key (required)Content-Type: application/json (required)Idempotency-Key: <uuid> — recommended for write operations to make retries safeAll tool arguments are wrapped in an arguments object.
| Field | Type | Description |
|---|---|---|
campaign_name | string required | Campaign name (will be automatically suffixed with timestamp for uniqueness) |
daily_budget | number required | Daily budget in account currency (minimum 10/day for LinkedIn). Set currency field if not USD. |
organization_id | string required | LinkedIn Organization (Company Page) ID. The organization that will appear as the ad author. Must be a Company Page you have admin access to. |
asset_bundle_id | string optional | Asset bundle ID from validate_and_prepare_linkedin_assets tool. Use this for NEW image uploads. Mutually exclusive with image_urn. |
image_urn | string optional | Existing LinkedIn image asset URN from discover_linkedin_assets tool. Use this to REUSE an existing image from your LinkedIn asset library. Format: urn:li:digitalmediaAsset:XXX. Mutually exclusive with asset_bundle_id. |
introductory_text | string required | Main ad text/copy (up to 600 characters). This is the primary message that appears with your ad. Best practice: Use 150 characters or less for optimal engagement. |
headline | string required | Ad headline (up to 70 characters, REQUIRED). Appears below the image. Keep it concise and action-oriented. Ads without headlines perform significantly worse. |
landing_page_url | string required | Destination URL where users will be directed. Must be HTTPS. LinkedIn tracks clicks and conversions through this URL. |
call_to_action | string optional | Call-to-action button label. Options: APPLY, DOWNLOAD, VIEW_QUOTE, LEARN_MORE, SIGN_UP,SUBSCRIBE, REGISTER, JOIN, ATTEND, REQUEST_DEMO. Default: LEARN_MORE. default: "LEARN_MORE" |
campaign_group_id | string optional | Existing Campaign Group ID to add this campaign to (for multi-audience setups). Pass this to create multiple campaigns with different targeting under ONE group. Get this from a prior create_linkedin_*_campaign response. Format: numeric ID or urn:li:sponsoredCampaignGroup:XXXXX. If provided, campaign_group_name is NOT needed. |
campaign_group_name | string optional | Name for a NEW campaign group (REQUIRED if campaign_group_id not provided). This is the top-level container that groups related campaigns. Example: 'Q2 B2B SaaS Campaign', 'Summer Product Launch'. Max 100 characters. |
objective | string optional | Campaign objective (use SINGULAR form). Options: BRAND_AWARENESS, ENGAGEMENT, WEBSITE_VISIT, WEBSITE_CONVERSION, VIDEO_VIEW, JOB_APPLICANT. Default: WEBSITE_VISIT (optimizes for clicks to your landing page). Note: LEAD_GENERATION is NOT supported for Single Image Ads - it requires Lead Gen Forms. default: "WEBSITE_VISIT" |
locations | array required | List of LinkedIn location URNs to target. Required field. Use search_linkedin_targeting with facet='locations' to find URNs. Supports country, state, city, and metro targeting. Examples: US=urn:li:geo:103644278, California=urn:li:geo:102095887, New York City=urn:li:geo:102571732, UK=urn:li:geo:101165590, Canada=urn:li:geo:101174742, Germany=urn:li:geo:101282230. |
industries | array optional | Optional list of industry URNs to target. Example: ['urn:li:industry:4'] for Computer Software. Note: industries may NOT be AND'ed with employers targeting. |
seniorities | array optional | Optional list of seniority level URNs to target. URNs: Entry=urn:li:seniority:3, Senior=urn:li:seniority:4, Manager=urn:li:seniority:5, Director=urn:li:seniority:6, VP=urn:li:seniority:7, CXO=urn:li:seniority:8, Partner=urn:li:seniority:9, Owner=urn:li:seniority:10. Note: seniorities may NOT be AND'ed with job titles targeting. |
job_titles | array optional | Optional list of job title URNs to target. Highly specific targeting. Use targeting search to find title URNs. Note: job titles may NOT be AND'ed with seniorities or job functions. |
company_sizes | array optional | Optional list of company size (staff count range) URNs to target. URNs use format urn:li:staffCountRange:(min,max): 1=urn:li:staffCountRange:(1,1), 2-10=urn:li:staffCountRange:(2,10), 11-50=urn:li:staffCountRange:(11,50), 51-200=urn:li:staffCountRange:(51,200), 201-500=urn:li:staffCountRange:(201,500), 501-1000=urn:li:staffCountRange:(501,1000), 1001-5000=urn:li:staffCountRange:(1001,5000), 5001-10000=urn:li:staffCountRange:(5001,10000), 10000+=urn:li:staffCountRange:(10001,2147483647). Note: staffCountRanges may NOT be AND'ed with employers targeting. |
skills | array optional | Optional list of skill URNs. Example: ['urn:li:skill:17']. Use search_linkedin_targeting to discover skill URNs. |
job_functions | array optional | Optional list of job function URNs. Example: ['urn:li:function:22']. Note: job functions may NOT be AND'ed with job titles. |
interests | array optional | Optional list of interest URNs. Example: ['urn:li:interest:689290']. Target members based on interests expressed on LinkedIn. |
degrees | array optional | Optional list of degree URNs. Example: ['urn:li:degree:700']. |
fields_of_study | array optional | Optional list of field of study URNs. Example: ['urn:li:fieldOfStudy:100275']. |
employers | array optional | Optional list of employer (organization) URNs. Example: ['urn:li:organization:1035']. Note: employers may NOT be AND'ed with industries or staffCountRanges. |
member_groups | array optional | Optional list of LinkedIn group URNs. Example: ['urn:li:group:1234']. Include-only facet. Disabled in EEA/CH since May 2024. |
age_ranges | array optional | Optional list of age range URNs. Include-only facet. Values: urn:li:ageRange:(18,24), urn:li:ageRange:(25,34), urn:li:ageRange:(35,54), urn:li:ageRange:(55,2147483647). |
genders | array optional | Optional list of gender URNs. Include-only facet. Values: urn:li:gender:MALE, urn:li:gender:FEMALE. |
schools | array optional | Optional list of school (organization) URNs. Example: ['urn:li:organization:1035']. |
member_behaviors | array optional | Optional list of member behavior URNs. Example: ['urn:li:memberBehavior:2'] (Mobile Users). Note: may NOT be AND'ed with contact/website retargeting segments. |
years_of_experience | array optional | Optional list of years of experience URNs. Example: ['urn:li:yearsOfExperience:3']. Range: 1-12+ years. Up to 2 URNs for lower/upper limit. |
followed_companies | array optional | Optional list of followed company (organization) URNs. Target members who follow specific companies. |
buyer_groups | array optional | Optional list of buyer group URNs (API 2026-03+). Example: ['urn:li:standardizedProductCategory:1031']. Target B2B buyers in specific product categories. |
account_id | string optional | LinkedIn Ad Account ID (optional - will use primary account if not provided) |
currency | string optional | Currency code for budget. Default: USD. default: "USD" |
status | string optional | Initial campaign status. Options: ACTIVE, PAUSED, DRAFT. Default: PAUSED (campaign created paused for review before spending money). default: "PAUSED" |
locale_country | string optional | Campaign locale country code (ISO-3166 uppercase). Default: US. Examples: US, GB, CA, DE, FR, IN, AU, BR, JP. default: "US" |
locale_language | string optional | Campaign locale language code (ISO-639 lowercase). Default: en. Examples: en, de, fr, es, pt, ja, zh. default: "en" |
start_date | string optional | Optional campaign start date in ISO format (e.g., '2024-01-15T00:00:00Z'). If not provided, campaign starts immediately. |
end_date | string optional | Optional campaign end date in ISO format. If not provided, campaign runs indefinitely until paused. |
total_budget | number optional | Optional total lifetime budget. If set, campaign will stop after spending this amount. |
creative_name | string optional | Name for the first creative (shown in Campaign Manager UI). E.g. 'Summer Sale - Ad 1', 'Long Form — Problem Hook'. If not provided, defaults to '{campaign_name} - Ad 1'. |
{
"arguments": {
"campaign_name": "string",
"daily_budget": 10.0,
"organization_id": "string",
"introductory_text": "string",
"headline": "string",
"landing_page_url": "https://example.com",
"locations": [
"string"
],
"asset_bundle_id": "string",
"image_urn": "string",
"call_to_action": "LEARN_MORE",
"campaign_group_id": "string",
"campaign_group_name": "string",
"objective": "WEBSITE_VISIT"
}
}
{
"success": true,
"data": {
"text": "(tool-specific textual output for create_linkedin_image_campaign)",
"quota": {
"used": 42,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01"
}
},
"tool": "create_linkedin_image_campaign"
}
{
"success": false,
"error": "You have 25 meta_ads accounts connected. Please specify which account to use by passing the ad_account_id parameter:\n - Acme Holdings (ad_account_id=\"act_123456789\")\n - Acme EU (ad_account_id=\"act_987654321\")",
"is_error": true,
"tool": "create_linkedin_image_campaign"
}
{
"success": false,
"error": "\ud83d\udea8 Monthly limit reached (150/150 tool calls on Plus tier).\nUpgrade to Pro at https://adspirer.ai to keep building.",
"is_error": true,
"tool": "create_linkedin_image_campaign",
"quota": {
"used": 150,
"limit": 150,
"tier": "plus",
"period_end": "2026-05-01",
"upgrade_url": "https://adspirer.ai"
}
}
Interactive: Swagger UI
Machine-readable: OpenAPI 3.1 spec · llms-full.txt
More tools: LinkedIn Ads · All tools
Adspirer REST API — get an API key at adspirer.ai/keys · adspirer.ai