§ 01Platform split warning
Two LinkedIn systems \u00B7 do not confuse them
Apify LinkedIn Actors are for SCRAPING profiles and companies (see Doc 12, Scrapes 13\u201316). The LinkedIn REST API is for PUBLISHING content, managing campaigns, and pulling analytics \u2014 that is what this document covers. The REST API does not scrape, and the Apify actors do not publish.
§ 02Organic posts (4)
All four posts use POST /rest/posts with the Windfield organization URN as author and lifecycleState: PUBLISHED. Post 1 includes the property hero image; the rest are text-only and rely on hashtag distribution.
Organic posts \u00B7 ready to publish4 posts \u00B7 spaced 24 hours apart
| # | Angle | Hook | Hashtags |
|---|---|---|---|
| 1 | Property announcement | New on the market: 8630 N Green Hills Road in KC Northland. | #CommercialRealEstate #MedicalOffice #KansasCity #KCNorthland |
| 2 | Owner-occupant angle | Most medical practices lease space and never build equity. | #MedicalOffice #PhysicianOwner #OwnerOccupant |
| 3 | Investor angle | Medical office is the most resilient CRE asset class. | #HealthcareREIT #MedicalOfficeInvestment #MOB |
| 4 | Med spa demand gap | KC Northland has zero dedicated med spas in the corridor. | #MedSpa #AestheticMedicine #Botox |
Sample \u00B7 Post 1 (announcement)json
"author": "urn:li:organization:{{WINDFIELD_ORG_ID}}",
"commentary": "New on the market: 8630 N Green Hills Road in KC Northland.\n\n10,500 SF. Class-A. Built 2020. Single-story. B3-3 medical zoning...",
"visibility": "PUBLIC",
"distribution": { "feedDistribution": "MAIN_FEED" },
"lifecycleState": "PUBLISHED",
"isReshareDisabledByAuthor": falseImage upload sequence (Post 1 only)
1) POST to /rest/images?action=initializeUpload with the Windfield org URN as owner. 2) Upload property-8630-hero.jpg to the returned uploadUrl. 3) Use the returned image URN in content.media.id on the post.
§ 03Ad campaigns (3)
Ad campaigns \u00B7 staged in DRAFT3 campaigns \u00B7 30-day flight
| Letter | Name | Objective | Daily / Total |
|---|---|---|---|
| A | Medical Practice Awareness | BRAND_AWARENESS | $25 / $750 |
| B | Medical Lead Gen | LEAD_GENERATION | $40 / $1,200 |
| C | Healthcare RE Investor (dark post) | WEBSITE_VISITS | $20 / $600 |
Sample \u00B7 Campaign B (Lead Gen) targeting blockjson
"objectiveType": "LEAD_GENERATION",
"costType": "CPM",
"dailyBudget": { "amount": "40", "currencyCode": "USD" },
"targetingCriteria": {
"include": { "and": [
{ "or": { "urn:li:adTargetingFacet:titles": [
"urn:li:title:Practice Owner",
"urn:li:title:Physician Owner",
"urn:li:title:DDS",
"urn:li:title:Chiropractor",
"urn:li:title:Optometrist",
"urn:li:title:Medical Director"
] } },
{ "or": { "urn:li:adTargetingFacet:locations": ["urn:li:geo:103644278"] } },
{ "or": { "urn:li:adTargetingFacet:seniorities": ["urn:li:seniority:10", "urn:li:seniority:9"] } }
] }
}
// geo:103644278 = Kansas City Metropolitan Area · seniority:10 = Owner · :9 = Partner§ 04Analytics endpoints
Analytics \u00B7 post performance and ad performanceendpoints
# Post performance
GET /rest/organizationalEntityShareStatistics
?q=organizationalEntity
&organizationalEntity=urn:li:organization:{{ORG_ID}}
&shares=urn:li:share:{{POST_URN}}
# Ad campaign performance
GET /rest/adAnalytics
?q=analytics
&campaigns=urn:li:sponsoredCampaign:{{CAMPAIGN_ID}}
&dateRange.start.month={{M}}&dateRange.start.day={{D}}&dateRange.start.year={{Y}}
# Metrics tracked: impressions, clicks, CTR, conversions, spend, costPerClick, costPerConversion§ 05Execution order
1
Phase 1 · Day 1 · upload hero image
POST to /rest/images?action=initializeUpload, then upload to returned uploadUrl, capture image URN.
2
Day 1–4 · publish posts 1, 2, 3, 4
Space 24 hours apart for distribution. Post 1 carries the image URN; posts 2–4 are text-only.
3
Phase 2 · Day 5+ · stage 3 campaigns in DRAFT
Create A, B, C with status DRAFT. Upload creative for each. Review targeting before flipping ACTIVE.
4
Phase 3 · ongoing · analytics
Pull post analytics weekly, ad analytics daily once active. Adjust targeting based on engagement.