create_linkedin_image_campaign

LinkedIn Ads Write

⚠️ STOP - DO NOT CALL THIS TOOL DIRECTLY! This tool creates REAL LinkedIn campaigns that cost REAL money

Endpoint

POST https://api.adspirer.ai/api/v1/tools/create_linkedin_image_campaign/execute

Headers

Description

⚠️ STOP - DO NOT CALL THIS TOOL DIRECTLY! This tool creates REAL LinkedIn campaigns that cost REAL money. You MUST follow the MANDATORY 9-PHASE WORKFLOW below before calling this tool. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MANDATORY 9-PHASE WORKFLOW - MUST COMPLETE ALL PHASES WITH USER CONFIRMATION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ PHASE 1: DISCOVERY (required) ✓ Call `get_linkedin_organizations` to get Organization ID and Account ID ✓ Call `research_business_for_linkedin_targeting` with user's website URL ✓ Ask user about their business, products, and ideal customer PHASE 2: TARGETING STRATEGY (required - present ALL options to user) ✓ Ask user which LOCATIONS to target (show common options: US, UK, Canada, EU, etc.) ✓ Present SENIORITY levels with recommendations: - Unpaid (urn:li:seniority:1), Training (urn:li:seniority:2), 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) - Recommend for B2B: Manager, Director, VP, CXO ✓ Present ALL COMPANY SIZE tiers (use staffCountRange URNs): - 1 employee: 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) ✓ Suggest INDUSTRIES based on research ✓ GET USER CONFIRMATION on targeting before proceeding PHASE 3: CAMPAIGN OBJECTIVE (required - explain ALL options) ✓ Call `explain_linkedin_objectives` or present this table to user: | Objective | Best For | Cost | |-----------|----------|------| | WEBSITE_VISIT ⭐ | Traffic to website | $5-15 CPC | | WEBSITE_CONVERSIONS | Sign-ups, purchases | $50-200 CPA | | LEAD_GENERATION | LinkedIn lead forms | $30-100 CPL | | BRAND_AWARENESS | Reach & impressions | $8-15 CPM | | ENGAGEMENT | Likes, shares | $10-20 CPM | | VIDEO_VIEWS | Video content | $0.05-0.20 CPV | ✓ Recommend ONE objective with reasoning based on user's business ✓ GET USER CONFIRMATION on objective PHASE 4: BUDGET & SCHEDULE (required) ✓ Ask user for DAILY BUDGET (minimum $10, recommend $30-50 for testing) ✓ Ask for CAMPAIGN DURATION (minimum 7 days for learning phase) ✓ Ask for START DATE (immediate or scheduled) ✓ GET USER CONFIRMATION PHASE 5: CONVERSION TRACKING (optional but recommended) ✓ Call `list_linkedin_conversions` to check existing conversions ✓ Present existing conversions to user ✓ Ask which conversions to track (or skip if none) PHASE 6: CREATIVE ASSETS (required) ✓ Call `discover_linkedin_assets` to find existing images ✓ Present available images to user with descriptions ✓ Ask user to SELECT an existing image OR upload new one ✓ If uploading: Use `validate_and_prepare_linkedin_assets` PHASE 7: AD CREATIVE COPY (required - create 4 variations) ✓ Call `generate_linkedin_ad_creatives` to create 4 variations: 1. Problem-focused (pain point) 2. Solution-focused (benefit) 3. Social proof (results/testimonials) 4. Curiosity/question hook ✓ Present ALL 4 variations to user ✓ Each variation needs: Introductory text, Headline, CTA ✓ GET USER APPROVAL on ad copy PHASE 8: FINAL CONFIRMATION (required) ✓ Present COMPLETE CAMPAIGN SUMMARY: - Campaign name, objective, daily budget, duration - All targeting settings - Ad creative content - Landing page URL - Estimated reach and costs ✓ Ask user: "Ready to create? Type 'Yes' to proceed" ✓ DO NOT PROCEED without explicit user confirmation PHASE 9: CREATE CAMPAIGN + ALL VARIATIONS (only after all confirmations) ✓ Call this tool with Variation 1 parameters to create the campaign ✓ Then call `add_linkedin_creative` for each remaining variation (2, 3, 4) using the campaign_id ✓ Campaign is created PAUSED by default - ask user if they want to activate ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CRITICAL RULES: 1. NEVER skip phases - complete ALL 9 phases in order 2. NEVER assume user preferences - ALWAYS ask 3. NEVER call this tool without explicit final confirmation 4. ALWAYS show all options (seniorities, company sizes, objectives) 5. ALWAYS present 4-5 ad creative variations to user BEFORE creating 6. ALWAYS create ALL approved variations (use `add_linkedin_creative` after initial creation) 7. ALWAYS present full summary before creating 8. ALWAYS provide a `creative_name` for each creative (e.g. "Campaign Name - Ad 1", "Campaign Name - Ad 2") 9. NEVER use "LinkedIn" in ad copy (introductory text, headline). LinkedIn's ad policy prohibits it. Also avoid other platform names (Facebook, Google, Instagram, etc.) Required Parameters: - campaign_name: Descriptive name (auto-suffixed with timestamp) - daily_budget: Minimum $10/day - organization_id: LinkedIn Company Page ID (from Phase 1) - introductory_text: Main ad copy (up to 600 chars) - landing_page_url: HTTPS URL - locations: List of location URNs (required) - Image source: image_urn OR asset_bundle_id (from Phase 6) Optional Parameters: - headline, call_to_action, objective - industries, seniorities, job_titles, company_sizes - start_date, end_date, total_budget Location URNs: - United States: urn:li:geo:103644278 - United Kingdom: urn:li:geo:101165590 - Canada: urn:li:geo:101174742 - Australia: urn:li:geo:101452733 - Germany: urn:li:geo:101282230 - India: urn:li:geo:102713980 Execution time: 15-30 seconds

Request body

All tool arguments are wrapped in an arguments object.

FieldTypeDescription
campaign_namestring requiredCampaign name (will be automatically suffixed with timestamp for uniqueness)
daily_budgetnumber requiredDaily budget in account currency (minimum 10/day for LinkedIn). Set currency field if not USD.
organization_idstring requiredLinkedIn 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_idstring optionalAsset bundle ID from validate_and_prepare_linkedin_assets tool. Use this for NEW image uploads. Mutually exclusive with image_urn.
image_urnstring optionalExisting 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_textstring requiredMain 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.
headlinestring requiredAd headline (up to 70 characters, REQUIRED). Appears below the image. Keep it concise and action-oriented. Ads without headlines perform significantly worse.
landing_page_urlstring requiredDestination URL where users will be directed. Must be HTTPS. LinkedIn tracks clicks and conversions through this URL.
call_to_actionstring optionalCall-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_idstring optionalExisting 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_namestring optionalName 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.
objectivestring optionalCampaign 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"
locationsarray requiredList 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.
industriesarray optionalOptional list of industry URNs to target. Example: ['urn:li:industry:4'] for Computer Software. Note: industries may NOT be AND'ed with employers targeting.
senioritiesarray optionalOptional 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_titlesarray optionalOptional 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_sizesarray optionalOptional 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.
skillsarray optionalOptional list of skill URNs. Example: ['urn:li:skill:17']. Use search_linkedin_targeting to discover skill URNs.
job_functionsarray optionalOptional list of job function URNs. Example: ['urn:li:function:22']. Note: job functions may NOT be AND'ed with job titles.
interestsarray optionalOptional list of interest URNs. Example: ['urn:li:interest:689290']. Target members based on interests expressed on LinkedIn.
degreesarray optionalOptional list of degree URNs. Example: ['urn:li:degree:700'].
fields_of_studyarray optionalOptional list of field of study URNs. Example: ['urn:li:fieldOfStudy:100275'].
employersarray optionalOptional list of employer (organization) URNs. Example: ['urn:li:organization:1035']. Note: employers may NOT be AND'ed with industries or staffCountRanges.
member_groupsarray optionalOptional list of LinkedIn group URNs. Example: ['urn:li:group:1234']. Include-only facet. Disabled in EEA/CH since May 2024.
age_rangesarray optionalOptional 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).
gendersarray optionalOptional list of gender URNs. Include-only facet. Values: urn:li:gender:MALE, urn:li:gender:FEMALE.
schoolsarray optionalOptional list of school (organization) URNs. Example: ['urn:li:organization:1035'].
member_behaviorsarray optionalOptional 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_experiencearray optionalOptional list of years of experience URNs. Example: ['urn:li:yearsOfExperience:3']. Range: 1-12+ years. Up to 2 URNs for lower/upper limit.
followed_companiesarray optionalOptional list of followed company (organization) URNs. Target members who follow specific companies.
buyer_groupsarray optionalOptional list of buyer group URNs (API 2026-03+). Example: ['urn:li:standardizedProductCategory:1031']. Target B2B buyers in specific product categories.
account_idstring optionalLinkedIn Ad Account ID (optional - will use primary account if not provided)
currencystring optionalCurrency code for budget. Default: USD. default: "USD"
statusstring optionalInitial campaign status. Options: ACTIVE, PAUSED, DRAFT. Default: PAUSED (campaign created paused for review before spending money). default: "PAUSED"
locale_countrystring optionalCampaign locale country code (ISO-3166 uppercase). Default: US. Examples: US, GB, CA, DE, FR, IN, AU, BR, JP. default: "US"
locale_languagestring optionalCampaign locale language code (ISO-639 lowercase). Default: en. Examples: en, de, fr, es, pt, ja, zh. default: "en"
start_datestring optionalOptional campaign start date in ISO format (e.g., '2024-01-15T00:00:00Z'). If not provided, campaign starts immediately.
end_datestring optionalOptional campaign end date in ISO format. If not provided, campaign runs indefinitely until paused.
total_budgetnumber optionalOptional total lifetime budget. If set, campaign will stop after spending this amount.
creative_namestring optionalName 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'.

Example request

{
  "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"
  }
}

Example responses

200 — Success

{
  "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"
}

400 — Tool-level error (bad arguments / multi-account selection)

{
  "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"
}

402 — Quota exhausted

{
  "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"
  }
}

Try it live


Adspirer REST API — get an API key at adspirer.ai/keys · adspirer.ai