Linkedin Post Search

io.github.johnisanerd由 GitHub 帳號 johnisanerd 發布v1.0.0更新於 Nov 3, 2026

通過託管的 MCP 伺服器,按關鍵字、姓名或話題標籤搜尋公開的 LinkedIn 帖子,並檢視互動資料。

AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。

原文描述

Search public LinkedIn posts by keyword, name or hashtag, with engagement, via a hosted MCP server.

已驗證Streamable HTTP可網頁執行溝通與協作

概覽

Linkedin Post Search 的託管 MCP 服務(mcp.apify.com);需要 OAuth 登入;Streamable HTTP。

暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。

端點
mcp.apify.com
最近檢查

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Linkedin Post Search,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.johnisanerd%2Flinkedin-post-search/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "linkedin-post-search": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=johnvc/linkedin-post-search-api"
    }
  }
}

README

🔎 LinkedIn Post Search API: Search LinkedIn Posts by Keyword from Python and MCP

LinkedIn post search by keyword, name, phrase or #hashtag: get every matching public post as JSON, with the full text, author, date, reactions, comments, images and links. No LinkedIn login, no cookie.

This repo is a Python and MCP quick-start for the LinkedIn Post Search API on Apify. Give it keywords, names or hashtags and a date window such as the past day or the past week, and it returns the public LinkedIn posts that mention them, one row per post. It is the search LinkedIn itself only offers to logged-in members, run as an API over the public side of LinkedIn: no account, no session cookie, nothing attributed to you. Run it on a schedule and it becomes a LinkedIn social listening feed; run it once with a date range and it is research for a story, a launch or an event.

Coverage is the public, indexed part of LinkedIn. Posts from members who keep their activity private, and posts published in the last few hours, may be missing, and a signed-out visitor sees at most 10 comments per post. For a mention monitor that is usually what you want: the posts that are public and spreading.

Responsible use: the API returns only what LinkedIn shows signed-out visitors and collects no contact details, and you are responsible for using the data lawfully.

Video Walkthrough

[Watch the walkthrough]

Text walkthrough

The LinkedIn Post Search API turns a keyword into a list of public LinkedIn posts. You pass keywords (up to 20 names, phrases or #hashtags, each matched as an exact phrase), pick postedWithin (day, week, month, year) or a startDate and endDate, and cap the run with maxPostsPerKeyword. Each row carries text, authorName, authorUrl, authorType, datePosted, numLikes, numComments, topComments, hashtags, images, embeddedLinks, taggedPeople and taggedCompanies, plus matchedKeyword and the search page and rank it came from. For LinkedIn hashtag analytics, pass #semiconductors with postedWithin: "week" and sort the rows by numLikes to see which posts and authors lead the tag; for brand monitoring, pass your company and your executives with postedWithin: "day" on a daily schedule. The default run in this repo asks for five posts about one event and costs well under a cent; posts and search pages read in the last 7 days come back from a shared cache, so repeats are cheaper and faster.

Quick Start

Prerequisites

  1. Clone the repository

    bash
    git clone https://github.com/johnisanerd/Apify-LinkedIn-Post-Search-API.gitcd Apify-LinkedIn-Post-Search-API
  2. Install dependencies with UV

    bash
    # Install UV if you do not have it:curl -LsSf https://astral.sh/uv/install.sh | sh
    # Install project dependencies:uv sync
  3. Configure your API key

    bash
    cp .env.example .env# Edit .env and add your Apify API key# Get your free API key at: https://apify.com?fpr=9n7kx3
  4. Run the example

    bash
    uv run python linkedin-post-search-api-example.py

The script starts one run for "Jackson Hole Symposium" with maxPostsPerKeyword: 5, waits for it to finish, prints each post with its author, date, reactions and link, and then prints the run's RUN_SUMMARY (pages fetched, cache hits, why each keyword stopped). Three recipe helpers mirror the use cases on the Actor's Examples tab:

bash
uv run python linkedin-post-search-api-example.py hashtag    # track #semiconductors this weekuv run python linkedin-post-search-api-example.py mentions   # past-day brand and executive mentionsuv run python linkedin-post-search-api-example.py top        # most liked posts on a topic this week

Alternative: set the API key directly

bash
export APIFY_API_TOKEN="your_api_key_here"uv run python linkedin-post-search-api-example.py

Why Use This LinkedIn Post Search API?

No LinkedIn login or cookie

The API reads only what LinkedIn shows a signed-out visitor. There is no field for an account, a password or an li_at cookie, so no LinkedIn account is ever at risk, and anyone with a free Apify token can search LinkedIn posts without an account.

A date window that is checked, not guessed

postedWithin and the startDate / endDate range are applied to the search and then checked against every post's own timestamp before it is delivered, so you are never billed for a post outside the window. LinkedIn's own feed cannot filter posts by date; this API can.

Engagement and context on every post

Each row carries reactions, comment count, up to 10 of the comments a signed-out visitor sees, the people and companies tagged in the post, the hashtags, the media and links, and the original post when the match is a share.

A shared cache that makes monitors cheap

Posts and search pages read in the last 7 days are reused across runs. Cached search pages are free, and a daily monitor pays only for the pages and posts that are new.

Pay per search page and per post, no start fee

One small event per page of search results fetched fresh and one per post delivered. Error rows, posts outside the window and cached pages cost nothing.

Recipes

These are the use cases the Actor's Examples tab is built around. Each is a ready input you can paste into the Apify Console or into RUN_INPUT in the example script.

Track a LinkedIn hashtag: posts, reactions and comments

json
{ "keywords": ["#semiconductors"], "postedWithin": "week", "maxPostsPerKeyword": 50 }

Every public post under the tag this week, with numLikes, numComments, author and date. Sort by reactions for LinkedIn hashtag analytics: which posts and which authors lead the conversation.

Monitor brand mentions on LinkedIn every day

json
{ "keywords": ["Your Company", "Your CEO"], "postedWithin": "day", "maxPostsPerKeyword": 100 }

LinkedIn social listening on a schedule. Save this as a task, attach a schedule such as 0 7 * * *, and each morning's dataset is the list of new public posts that mention you.

Search LinkedIn posts by keyword and export to CSV

json
{ "keywords": ["Jackson Hole Symposium"], "maxPostsPerKeyword": 50 }

A flat row per post: text, authorName, authorUrl, datePosted, numLikes, numComments. The run's Posts view downloads straight to CSV or Excel.

Find the most liked LinkedIn posts on a topic this week

json
{ "keywords": ["artificial intelligence"], "postedWithin": "week", "maxPostsPerKeyword": 100 }

The viral posts on a topic, ready to sort by numLikes. The top recipe in the example script prints the five most liked.

Search LinkedIn posts by date range for an event

json
{ "keywords": ["Jackson Hole Symposium"], "startDate": "2026-08-18", "endDate": "2026-08-29", "includeArticles": true }

Every public post and long-form article about an event in its window, each with datePosted, author and text. Useful for research after the fact, when LinkedIn's own search cannot go back by date.

Schedule tip

Any of these inputs becomes a monitor: save it as a task, attach a schedule (0 7 * * * daily, 0 */6 * * * every six hours, 0 9 * * 1 Mondays), and send each run's rows onward with Apify integrations to Slack, Google Sheets, a webhook or a database.

Features

Core Capabilities

  • Up to 20 keywords, names or #hashtags per run, each searched as an exact phrase across public LinkedIn posts
  • Rolling windows (postedWithin: day, week, month, year) or a custom startDate and endDate
  • maxPostsPerKeyword from 1 to 1,000 to cap cost; includeArticles to add long-form LinkedIn articles
  • Posts and search pages reused from a shared cache for 7 days, with short windows refreshed every 6 hours (day) and daily (week)
  • Datasets download as JSON, CSV or Excel, with a ready-made Posts view
  • Works as an MCP tool in Claude, Cursor and ChatGPT (see the install sections below)

Data Quality

  • Every post's own timestamp is checked against the window before delivery; posts outside it are never fetched or billed
  • matchedKeyword, searchPage and searchRank on every row, so results are traceable
  • A post found by two keywords is delivered once
  • fromCache and fetchedAt show whether a row came from the shared cache and when it was read
  • A keyword or post that cannot be read produces an error row with a plain-language reason, never a charge
  • RUN_SUMMARY reports pages fetched and cached, posts delivered and skipped, and why each keyword stopped

It pairs with the rest of the LinkedIn suite: the LinkedIn Posts API for everything one person or company has posted, the LinkedIn Profile API for full profiles of the authors you find (Python example repo), the LinkedIn Company API for the companies that post (Python example repo), and the LinkedIn People Search API to find people by name, title or company.

Coverage, speed and limits

  • Coverage. The API finds posts that search engines have indexed from the public side of LinkedIn. Posts from private accounts are not found, and new posts appear within hours, not seconds (three to four hours in testing).
  • Speed. A one-keyword, one-page run finishes in under a minute. A busy keyword with hundreds of posts takes several minutes, so the example script starts the run and waits rather than using the synchronous endpoint.
  • Comments. Up to 10 per post, which is what LinkedIn shows a signed-out visitor. Reposts and share counts are not shown to guests.
  • Not available. Who reacted, private posts, LinkedIn's own relevance ranking, and author filters that need a login.

Pricing

The API is priced per event: one search page event per page of results fetched fresh for a keyword (about 8 to 10 posts per page; pages served from the shared cache are free), and one post scraped event per post delivered. Error rows, posts outside your window and duplicates in a run are never charged. Check the Pricing tab on the Actor page for current rates; the default five-post run here is one page plus five posts. You can set a maximum cost per run in the Apify Console, or pass max_total_charge_usd to start() in Python as the example does.

Usage Examples

Basic Example

The default run in the example script:

json
{ "keywords": ["Jackson Hole Symposium"], "maxPostsPerKeyword": 5 }

Advanced Example

Two keywords in a custom date range, articles included, using every input parameter:

json
{  "keywords": ["Jackson Hole Symposium", "#semiconductors"],  "startDate": "2026-08-18",  "endDate": "2026-08-29",  "maxPostsPerKeyword": 100,  "includeArticles": true}

From an AI agent over MCP

When an assistant calls the API, keep the cap small and ask a question it can answer from the rows:

json
{ "keywords": ["#semiconductors"], "postedWithin": "day", "maxPostsPerKeyword": 20 }

"Which of these posts got the most reactions, and who wrote them?"

Input Parameters

Only keywords is required. Everything else narrows or limits the run.

ParameterTypeRequiredDefaultDescription
keywordsarray of stringYESprefilled ["Jackson Hole Symposium"]Names, phrases, companies or #hashtags to find, as plain words. Each is searched as an exact phrase. Up to 20 per run. Search operators and quote marks are refused.
postedWithinstringnoanyOnly posts from the past day, week, month or year. Ignored when a start or end date is set.
startDatestring (YYYY-MM-DD)noemptyOnly posts published on or after this day (UTC). Overrides postedWithin.
endDatestring (YYYY-MM-DD)noemptyOnly posts published on or before this day (UTC).
maxPostsPerKeywordintegerno50Stop after delivering this many posts for one keyword, 1 to 1,000.
includeArticlesbooleannofalseAlso search long-form LinkedIn articles (linkedin.com/pulse). Each keyword then runs two searches.

Output Format

A post row from a real run, shortened:

json
{  "resultType": "post",  "postId": "7363908644226125825",  "postUrl": "https://www.linkedin.com/posts/andrew-krei-cfa_the-feds-jackson-hole-symposium-is-always-activity-7363908644226125825-w3c1",  "postType": "repost",  "mediaType": "image",  "datePosted": "2025-08-20T12:23:55.561Z",  "text": "The Fed's Jackson Hole symposium is always a big event for markets, but this week's gathering will be especially important...",  "authorName": "Andrew Krei, CFA",  "authorUrl": "https://www.linkedin.com/in/andrew-krei-cfa",  "authorFollowers": 2758,  "authorType": "Person",  "numLikes": 58,  "numComments": 1,  "taggedCompanies": [{ "name": "Bloomberg News", "link": "https://www.linkedin.com/company/bloomberg-news" }],  "summary": "Post by Andrew Krei, CFA, 58 reactions, 1 comments, posted 2025-08-20",  "matchedKeyword": "Jackson Hole Symposium",  "searchRank": 1,  "searchPage": 1,  "fromCache": false,  "fetchedAt": "2026-10-10T14:03:22Z"}

An error row, which is never charged:

json
{  "resultType": "error",  "errorMessage": "Search page 2 for 'Jackson Hole Symposium' could not be fetched: the search service was busy.",  "matchedKeyword": "Jackson Hole Symposium",  "searchPage": 2}

Fields you will use most:

FieldRowsDescription
resultTypeallpost for a post or article, error for a keyword or post that could not be read.
postUrl, postIdpostThe public post link and LinkedIn's post id, a stable key for deduplication across runs.
datePostedpostWhen the post was published (ISO 8601, UTC).
text, titlepostThe full post text and its first line.
authorName, authorUrl, authorTypepostWho posted it, and whether the author is a Person or an Organization.
authorHeadline, authorFollowerspostThe author's headline and follower count, when LinkedIn shows them.
numLikes, numCommentspostReactions and comments.
topCommentspostUp to 10 comments, each with the commenter's name, date, text and reactions.
mediaType, images, videos, embeddedLinks, documentpostWhat the post carries: text, image, video, document or article, with the media and links.
taggedPeople, taggedCompanies, hashtagspost@-mentions and hashtags in the post.
resharedPostpostThe original post, when this one shares another.
matchedKeyword, searchPage, searchRankpostWhich keyword found the post and where it ranked.
fromCache, fetchedAtpostWhether the row came from the shared cache, and when it was read.
errorMessageerrorWhat could not be done and why, in plain language.

The run's RUN_SUMMARY record (key-value store) reports searchPagesFetched, searchPagesFromCache, postsDelivered, postsSkippedOutsideWindow and pagesStoppedBy for every run.

People also search for

Will this put my LinkedIn or LinkedIn Recruiter account at risk?

No. It reads public LinkedIn pages only, the ones anyone can open while signed out. It never logs in and never asks for your cookies: there is no input for an account, a password or an li_at session cookie. Nothing it does is tied to your LinkedIn account, your LinkedIn Recruiter seat or your Sales Navigator license. The requests run on Apify's servers, not in your browser, so nothing connects them to you, and you can keep working in Recruiter while a run is going.

How do I search LinkedIn posts by keyword?

Put the keyword in keywords and run the API. Each keyword is matched as an exact phrase across public LinkedIn posts, and every match comes back as a row with text, author, date and engagement. Add postedWithin or a date range to narrow it.

Can I search LinkedIn posts without an account or login?

Yes, for public posts. LinkedIn's own content search needs a login, so the API finds public posts through search-engine indexing and reads each post's public page the way a signed-out visitor sees it.

How do I do LinkedIn social listening?

Save a past-day search for your brand, products and executives as a task and schedule it every morning. Each run's dataset is that day's mention list; send it to Slack, a sheet or a database with Apify integrations. The Monitor brand mentions recipe above is the starting input.

How do I track a hashtag on LinkedIn?

Enter the hashtag with the # and pick a window. Every post under the tag comes back with reactions, comments and author, so LinkedIn hashtag analytics is a sort by numLikes away.

Can I search LinkedIn posts by date?

Yes. postedWithin covers the past day, week, month or year, and startDate with endDate covers any range. Every post's own timestamp is checked against the window before it is delivered.

Is there a social listening API for LinkedIn?

This is one: keyword in, public posts with authors and engagement out, on a schedule if you want it, callable from Python, n8n, Make, Zapier or an AI agent over MCP.


Install in Claude Cowork Desktop

[Install in Claude Cowork Desktop]

Cowork is the desktop app's automation mode. To give it the LinkedIn Post Search API as a tool, add the Apify MCP server as a connector.

  1. Open the Claude desktop app and go to Settings → Connectors (or Settings → Developer → Edit Config to edit claude_desktop_config.json directly).
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows: %APPDATA%\Claude\claude_desktop_config.json
  2. Add the Apify MCP server, preloaded with only this Actor:
json
{  "mcpServers": {    "apify": {      "command": "npx",      "args": [        "-y",        "mcp-remote",        "https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-post-search-api"      ]    }  }}
  1. Restart the app. When Cowork first calls the tool, complete the OAuth prompt in your browser, or add your Apify API token in the connector settings to skip OAuth.
  2. In a Cowork chat, confirm the tool is available and ask it to run the LinkedIn Post Search API.

Download the desktop app and start a free trial: https://claude.ai/referral/uIlpa7nPLg More help: https://docs.apify.com/platform/integrations/claude-desktop


Install in Claude Code

[Install in Claude Code]

Claude Code is the command-line tool. Add the Actor's MCP server with one command:

bash
claude mcp add --transport http apify \  "https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-post-search-api"

To use a token instead of browser OAuth:

bash
claude mcp add --transport http apify \  "https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-post-search-api" \  --header "Authorization: Bearer YOUR_APIFY_TOKEN"

Then verify with claude mcp list, or run /mcp inside a session. Ask Claude Code to call the LinkedIn Post Search API.

Try Claude Code free: https://claude.ai/referral/uIlpa7nPLg Claude Code MCP docs: https://code.claude.com/docs/en/mcp


Install in Claude (website)

[Install in Claude (website)]

On claude.ai you add Apify as a connector, then enable just this Actor's tool.

  1. Go to Settings → Connectors → Browse connectors and search for Apify MCP server. Install it (enable or update if prompted).
  2. When connecting, authenticate with your Apify API token, and enable the tool johnvc/linkedin-post-search-api.
  3. In any chat, open + → Connectors and turn on Apify.
  4. Alternatively, choose Add custom connector and paste the full MCP URL https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-post-search-api, using OAuth when prompted.
  5. Ask Claude to run the LinkedIn Post Search API.

Open Claude on the web: https://claude.ai


Install in Cursor

[Install in Cursor]

Cursor reads MCP servers from a project file at .cursor/mcp.json.

  1. In your project, create .cursor/mcp.json:
json
{  "mcpServers": {    "apify": {      "url": "https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-post-search-api"    }  }}
  1. If you prefer token auth over browser OAuth, add a header:
json
{  "mcpServers": {    "apify": {      "url": "https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-post-search-api",      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }    }  }}
  1. Open Cursor → Settings → MCP and confirm the apify server is connected (green dot).
  2. In Composer or Chat, ask Cursor to call the LinkedIn Post Search API.

New to Cursor? Get it here: https://cursor.com/referral?code=XQP4VBLI3NNX


Install in ChatGPT

[Install in ChatGPT]

ChatGPT connects to the Apify MCP server through Developer mode (available on ChatGPT Pro, Plus, Business, Enterprise, and Education plans).

  1. Click your profile icon, then go to Settings > Apps. If you do not see a Create app button, open Advanced settings and enable Developer mode.
  2. Click Create app and fill out the form:
    • Name: Apify
    • MCP Server URL: https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-post-search-api
    • Authentication: OAuth
  3. Click Create and authorize the connection with Apify.
  4. To use the app in a conversation, click + in the chat, choose Developer mode, and select Apify.

More help: https://docs.apify.com/platform/integrations/mcp


🌐 About Alpha OSINT

This example repo is part of Alpha OSINT, toolset of financial and operations data sources and APIs. See the Alpha OSINT LinkedIn map for the rest of the LinkedIn suite and how the Actors chain together. For support or requests for this actor, please start a ticket directly on our support page.

Made with care

Use the LinkedIn Post Search API to power your mention monitoring, hashtag analytics and research workflows with structured results.

Last Updated: 2026.10.20

來源:README.md,提交 ec1ccc9

工具

0
該伺服器需要登入,因此 SourceWeft 無法在沒有帳號的情況下讀取其工具,也未收錄。已連接帳號所能看到的內容可能因帳號及其權限而異。

版本歷史

1
  1. v1.0.0最新Nov 3, 2026

評分

已滿足適用檢查項的 75%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。