LinkedIn Profile & Company Posts Scraper | No Cookies
Pricing
from $1.35 / 1,000 posts
LinkedIn Profile & Company Posts Scraper | No Cookies
Scrape LinkedIn profile posts and company posts with content, authors and engagement. Add comments or reactions, filter reposts, and export JSON or CSV.
Pricing
from $1.35 / 1,000 posts
Rating
0.0
(0)
Developer
CrawlKite
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Export LinkedIn posts from profiles, company pages or individual post URLs. Collect available content, authors, timestamps and engagement for content research, social listening and reporting. Add separately priced comments, reactions and main-profile enrichment when needed.
Key Benefits
- No customer cookies or LinkedIn login: provide targets or search filters without uploading session credentials.
- Usage-based pricing: from $1.35 per 1,000 posts on Business. Optional engagement and enrichment are additional.
- Structured exports: keep nested fields in JSON or select columns for CSV and Excel.
- Use case: Track the content published by target profiles and company pages.
- Use case: Compare topics and engagement across a selected set of accounts.
- Use case: Export comments and reactions for engagement analysis.
How It Works
- Add profile, company or individual post URLs in
targetUrls. - Set
maxPostsper target and optionally a run-widemaxResultslimit. Apply age and repost controls when needed. - Optionally enable comments, reactions or main-profile enrichment. These add separately priced billing events.
- Set a spending limit, run the actor and export the dataset. Use
typeto distinguish posts, comments and reactions.
Example input
{"targetUrls": ["https://www.linkedin.com/in/williamhgates"],"maxPosts": 10}
Key input options
| Input | How to use it |
|---|---|
targetUrls | Profile URLs, company URLs or individual post URLs. |
maxPosts | Maximum posts per target. Use maxResults for a run-wide primary-result cap. |
includeReposts / includeQuotePosts | Set false to exclude the corresponding post type. |
postedLimit / postedLimitDate | Restrict posts by supported age window or a date cutoff. |
scrapeComments / maxComments | Collect comments, with a per-post maximum and separate item charges. |
scrapeReactions / maxReactions | Collect reactions, with a per-post maximum and separate item charges. |
Use the Input tab for the full list of controls, defaults and accepted values.
Example: collect posts with comments and reactions
This input requests at most two posts and, for each post, up to five comments and five reactions. Each delivered post, comment and reaction is billed separately.
{"targetUrls": ["https://www.linkedin.com/in/williamhgates"],"maxPosts": 2,"maxResults": 2,"scrapeComments": true,"maxComments": 5,"scrapeReactions": true,"maxReactions": 5}
Comments, reactions and author details
Enable scrapeComments or scrapeReactions and choose a per-post limit. Collected items appear as separate dataset rows. postNestedComments and postNestedReactions also embed copies inside each post, without charging twice for the copy. Choose main mode for separately priced profile enrichment of authors, commenters or reactors.
Use maxPosts for a per-target or per-query limit and maxResults for a total run cap. maxPosts overrides scrapePages; without maxPosts, scrapePages controls post-search pagination. With engagement enabled, maxComments or maxReactions set to 0 collects all available items within the run limits. Profile-post runs embed collected engagement by default; post search uses the postNestedComments and postNestedReactions switches. A zero maxPosts value continues only until source exhaustion or your request, page, spending and result safety limits. Leave contextCountry set to any with the standard connection; other regional contexts require additional configuration.
Data You'll Receive
| Fields | What they contain |
|---|---|
| type, id, linkedinUrl | Record type, identifier and URL |
| content, author, postedAt | Post text, available author fields and timestamps |
| engagement, postImages, article | Available engagement and media fields |
| comments, reactions, commentIds, reactionIds | Optional nested items and their IDs; separate rows are retained |
Available fields retain their nested structure. Values can be absent or empty. The optional _crawlkite metadata object is disabled by default. Media links and source data can change after collection.
Sample output
Results are stored as individual records in the run's dataset. A JSON export wraps those records in an array. The example below is illustrative, shortened and uses fictional names and IDs; it shows the output structure, not a real person or a guaranteed set of populated fields.
[{"type": "post","id": "example-post-id","linkedinUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789/","content": "We are hiring software engineers to help build our next product.","author": {"type": "profile","name": "Jane Example","linkedinUrl": "https://www.linkedin.com/in/jane-example","publicIdentifier": "jane-example"},"postedAt": {"date": "2026-11-01T09:00:00.000Z","timestamp": 1793523600000},"engagement": {"likes": 42,"comments": 8,"shares": 3,"reactions": [{"type": "LIKE","count": 42},{"type": "EMPATHY","count": 3}]},"postImages": [],"commentIds": [],"reactionIds": []}]
Optional comments and reactions
When enabled, comments and reactions are separate dataset records, each with a type field. For example, this export contains one comment and one reaction associated with a post:
[{"type": "comment","id": "example-comment-id","postId": "example-post-id","commentary": "Thank you for sharing this opportunity.","createdAt": "2026-11-01T10:00:00.000Z","actor": {"name": "Alex Example","linkedinUrl": "https://www.linkedin.com/in/alex-example"}},{"type": "reaction","id": "example-reaction-id","postId": "example-post-id","reactionType": "LIKE","actor": {"name": "Alex Example","linkedinUrl": "https://www.linkedin.com/in/alex-example"}}]
Dataset order is not guaranteed. Filter by type to separate posts, comments and reactions. A post's engagement.comments value is a reported count, not the number of comment records this run collected. For example, a post can report 500 comments while your maxComments: 5 setting collects at most five. Missing or restricted source data can reduce that further.
CrawlKite pricing
The actor's Apify Pricing tab is authoritative. The table below shows actor usage rates by Apify plan. Platform subscriptions are separate from actor usage.
| Operation / billing unit | Free | Starter | Scale | Business |
|---|---|---|---|---|
| Posts / 1,000 posts | $1.80 | $1.80 | $1.575 | $1.35 |
| Comments or reactions / 1,000 items | $1.80 | $1.80 | $1.575 | $1.35 |
| Main-profile enrichment / 1,000 profiles | $1.80 | $1.80 | $1.62 | $1.40 |
Pricing comparison with HarvestAPI
The rates below are 10% below the corresponding HarvestAPI rates for the operations shown below, except Business full profiles (6.25% lower) and Business main profiles (6.67% lower), where applicable. This compares individual billing events, not the total cost of every possible run or a guarantee of identical data coverage.
| Operation / billing unit | Apify plan | CrawlKite | HarvestAPI | Lower by |
|---|---|---|---|---|
| Posts / 1,000 posts | Free | $1.80 | $2.00 | 10% |
| Posts / 1,000 posts | Starter | $1.80 | $2.00 | 10% |
| Posts / 1,000 posts | Scale | $1.575 | $1.75 | 10% |
| Posts / 1,000 posts | Business | $1.35 | $1.50 | 10% |
| Comments or reactions / 1,000 items | Free | $1.80 | $2.00 | 10% |
| Comments or reactions / 1,000 items | Starter | $1.80 | $2.00 | 10% |
| Comments or reactions / 1,000 items | Scale | $1.575 | $1.75 | 10% |
| Comments or reactions / 1,000 items | Business | $1.35 | $1.50 | 10% |
| Main-profile enrichment / 1,000 profiles | Free | $1.80 | $2.00 | 10% |
| Main-profile enrichment / 1,000 profiles | Starter | $1.80 | $2.00 | 10% |
| Main-profile enrichment / 1,000 profiles | Scale | $1.62 | $1.80 | 10% |
| Main-profile enrichment / 1,000 profiles | Business | $1.40 | $1.50 | 6.67% |
Comparison checked on 1 November 2026 against HarvestAPI's corresponding actor pricing. Rates can change. Full-profile prices in post enrichment use the profile actor comparison. This table covers Free, Starter, Scale and Business. Optional enrichment and engagement are separately priced; short people-search results are billed per search page, not per profile. There is no separate actor-start charge. Free-plan trials have stricter request and result caps.
Email search is charged for the requested enrichment operation and does not guarantee a found email. Additional search/probe pages, filters and requested add-ons can affect total usage. CrawlKite and HarvestAPI are independent services; CrawlKite is not affiliated with HarvestAPI.
Billing example
On Starter, 100 posts cost 100 × $0.0018 = $0.18. If you also collect 200 comments and 100 reactions, add 300 × $0.0018 = $0.54, for $0.72 total. Main-profile enrichment, when selected, adds its own profile charge. Asking for 200 posts sets a maximum; billing uses delivered items, not a flat page price.
These examples use the Starter actor rates below and exclude your Apify subscription. Check the Pricing tab and set a run spending limit. Free-plan runs have stricter request and result caps; they cannot be used to reproduce these larger examples.
LinkedIn Profile & Company Posts Scraper API
Use the API tab for your actor's generated integration examples. You can run the same input from an application and retrieve dataset items through the Apify API.
For a small synchronous request, the following Bash example returns dataset items as JSON. Replace the placeholder with your Apify token and keep it out of public code:
curl --request POST \'https://api.apify.com/v2/acts/crawlkite~linkedin-profile-posts/run-sync-get-dataset-items' \--header 'Authorization: Bearer YOUR_APIFY_TOKEN' \--header 'Content-Type: application/json' \--data '{"targetUrls":["https://www.linkedin.com/in/williamhgates"],"maxPosts":10}'
For longer jobs, use the asynchronous run endpoint shown in the API tab, wait for the run to finish, and retrieve its dataset. Set a spending limit before running at scale. You can also schedule exports or connect Apify to n8n, Make or Zapier.
Frequently Asked Questions
Can I exclude reposts or limit older posts?
Yes. Use includeReposts, includeQuotePosts, postedLimit or postedLimitDate. maxPosts applies to each input target, while maxResults caps the entire run.
Why are there fewer results than requested?
Requested counts are maximums. Source availability, filters, duplicate removal, pagination and spending/request limits can reduce the export. Check the run's SUMMARY for results, errors and its stopping reason. Free-plan runs also have stricter request and result caps.
How do I export the results?
Open the completed run's dataset and choose JSON, CSV or Excel. JSON preserves nested objects and arrays. Select or flatten the fields you need for a CRM or spreadsheet workflow.
Support and Feedback
Create an issue in this actor's Issues tab with the run ID, what you expected, and a redacted input example. Review the SUMMARY and ERRORS records first. Do not include passwords, API tokens or MongoDB connection strings. If a run crashes, inspect its existing dataset and billing events before retrying; output and charges are not guaranteed to occur exactly once across a crash.
More LinkedIn Tools from CrawlKite
- LinkedIn Profile Scraper + Email — Enrich CRM contacts with current roles, work history and education.
- LinkedIn Company Scraper — Enrich company records with websites, industries and employee counts.
- LinkedIn Post Search Scraper — Find relevant conversations around a product, topic or market.
- LinkedIn People Search Scraper + Email — Build prospect lists using company, location and role filters.
Explore CrawlKite's LinkedIn API collection for connected profile, company, content and people-search workflows.
Collect and use data only for authorized purposes and follow applicable privacy requirements.