# OutX - Full Documentation > LinkedIn API and social listening platform. Fetch profiles, monitor posts, automate engagement. Base URL: https://api.outx.ai Auth: x-api-key header on every request Get your key: https://mentions.outx.ai/api-doc ## Table of Contents - [OutX - LinkedIn Social Listening, Automation & API Platform](https://outx.ai/docs/index) - [OutX for AI Agents](https://outx.ai/docs/ai) - [Pricing & Subscription](https://outx.ai/docs/documentation/pricing-and-subscription) - [Get started in 10 minutes](https://outx.ai/docs/documentation/linkedin-social-listening/get-started-in-10-minutes) - [Keyword Watchlist](https://outx.ai/docs/documentation/linkedin-social-listening/keyword-watchlist) - [People Watchlist](https://outx.ai/docs/documentation/linkedin-social-listening/people-tracking) - [Company Watchlist](https://outx.ai/docs/documentation/linkedin-social-listening/company-watchlist) - [Feed & Filters](https://outx.ai/docs/documentation/linkedin-social-listening/feed-and-filters) - [Auto like and Auto comment](https://outx.ai/docs/documentation/linkedin-social-listening/auto-engagement) - [Reddit Tracking](https://outx.ai/docs/documentation/linkedin-social-listening/reddit-tracking) - [Get started in 10 minutes](https://outx.ai/docs/documentation/personal-branding/get-started-in-10-minutes) - [How to Automate Likes & Comments?](https://outx.ai/docs/documentation/personal-branding/how-to-automate-likes-comments-to-boost-engagement) - [How OutX.ai Analyzes Likes & Comments](https://outx.ai/docs/documentation/personal-branding/how-outx-analyzes-likes-and-comments) - [Activity](https://outx.ai/docs/documentation/personal-branding/activity) - [Get Started in 10 Minutes](https://outx.ai/docs/documentation/data-export/get-started-in-10-minutes) - [LinkedIn Sales Navigator Export](https://outx.ai/docs/documentation/data-export/linkedin-sales-navigator) - [People Search Export](https://outx.ai/docs/documentation/data-export/people-search-export) - [Database](https://outx.ai/docs/documentation/data-export/lists) - [OutX API - LinkedIn Social Listening & Automation API](https://outx.ai/docs/api-reference/introduction) - [Authentication](https://outx.ai/docs/api-reference/authentication) - [Quick Start](https://outx.ai/docs/api-reference/quickstart) - [API Use Cases & Workflows](https://outx.ai/docs/api-reference/use-cases) - [Error Codes](https://outx.ai/docs/api-reference/errors) - [Rate Limits](https://outx.ai/docs/api-reference/rate-limits) - [Webhooks](https://outx.ai/docs/api-reference/webhooks) - [Send OTP - Sign Up or Log In via API](https://outx.ai/docs/linkedin-api/auth-send-otp) - [Verify OTP - Complete Authentication and Get API Key](https://outx.ai/docs/linkedin-api/auth-verify-otp) - [Create Keyword Watchlist](https://outx.ai/docs/api-reference/watchlist/keyword/create) - [Get Keyword Watchlists](https://outx.ai/docs/api-reference/watchlist/keyword/get) - [Update Keyword Watchlist](https://outx.ai/docs/api-reference/watchlist/keyword/update) - [Delete Keyword Watchlist](https://outx.ai/docs/api-reference/watchlist/keyword/delete) - [Create People Watchlist](https://outx.ai/docs/api-reference/watchlist/people/create) - [Get People Watchlists](https://outx.ai/docs/api-reference/watchlist/people/get) - [Update People Watchlist](https://outx.ai/docs/api-reference/watchlist/people/update) - [Delete People Watchlist](https://outx.ai/docs/api-reference/watchlist/people/delete) - [Create Company Watchlist](https://outx.ai/docs/api-reference/watchlist/company/create) - [Get Company Watchlists](https://outx.ai/docs/api-reference/watchlist/company/get) - [Update Company Watchlist](https://outx.ai/docs/api-reference/watchlist/company/update) - [Delete Company Watchlist](https://outx.ai/docs/api-reference/watchlist/company/delete) - [LinkedIn Post Search & Filter API - Retrieve Posts from Watchlists](https://outx.ai/docs/api-reference/engagement/posts/get) - [Like a Post](https://outx.ai/docs/api-reference/engagement/like/create) - [Comment on a Post](https://outx.ai/docs/api-reference/engagement/comment/create) - [LinkedIn Data - Fetch Profiles, Posts, and Automate Engagement](https://outx.ai/docs/linkedin-api/introduction) - [LinkedIn API Quick Start - Fetch Your First Profile in 2 Minutes](https://outx.ai/docs/linkedin-api/quickstart) - [LinkedIn Profile Data API - Fetch Any LinkedIn Profile](https://outx.ai/docs/linkedin-api/fetch-profile) - [LinkedIn Posts API - Fetch Posts from Any Profile](https://outx.ai/docs/linkedin-api/fetch-profiles-posts) - [LinkedIn Like API - Like Posts Programmatically](https://outx.ai/docs/linkedin-api/like-post) - [LinkedIn Comment API - Comment on Posts via API](https://outx.ai/docs/linkedin-api/comment-post) - [Check Async Task Status - LinkedIn API](https://outx.ai/docs/linkedin-api/get-task-status) - [LinkedIn API Roadmap - Upcoming Endpoints](https://outx.ai/docs/linkedin-api/coming-soon) - [MCP Server — Connect AI Agents to OutX](https://outx.ai/docs/integrations/mcp) - [Python Integration — OutX API Client](https://outx.ai/docs/integrations/python-sdk) - [n8n Integration — Automate LinkedIn Workflows with OutX](https://outx.ai/docs/integrations/n8n) - [LangChain Integration — Build AI Agents with LinkedIn Data](https://outx.ai/docs/integrations/langchain) - [Chrome Extension](https://outx.ai/docs/resources/chrome-extension) - [LinkedIn Account Safety](https://outx.ai/docs/resources/linkedin-safety) - [Account Management](https://outx.ai/docs/resources/account-management) - [Billing & Payments](https://outx.ai/docs/resources/billing-and-payments) - [Troubleshooting](https://outx.ai/docs/resources/troubleshooting) - [Frequently Asked Questions](https://outx.ai/docs/resources/faq) --- # OutX - LinkedIn Social Listening, Automation & API Platform Source: https://outx.ai/docs/index OutX is a LinkedIn social listening, personal branding, and API platform. Track keywords, monitor profiles, automate engagement, and fetch LinkedIn data via API. **For AI agents**: Use [llms.txt](https://outx.ai/docs/llms.txt) for documentation discovery or [llms-full.txt](https://outx.ai/docs/llms-full.txt) for complete docs in a single file. ## Get Started No-code dashboard for social listening, personal branding, and data export. Create watchlists, retrieve AI-categorized posts, and automate engagement via API. Fetch profiles, get posts, like and comment. Direct LinkedIn proxy for developers. ## Explore Track keywords, people, and companies on LinkedIn with real-time alerts Auto-like and auto-comment to stay active and visible on LinkedIn Export leads from Sales Navigator and LinkedIn People Search Full API documentation for watchlists and LinkedIn data endpoints Required for all OutX features — installation, permissions, and troubleshooting Integrate OutX with Claude Code, Cursor, and other AI development tools ## How OutX Works OutX runs through the [Chrome extension](/resources/chrome-extension) installed on your browser. The extension operates in the background while you browse — it simulates normal LinkedIn browsing, so it looks exactly like you are manually using LinkedIn. OutX does not take your cookies, passwords, or save any credentials. Everything runs locally in your browser. This means: - **No proxy rotation or CAPTCHA solving** needed - **No risk of IP bans** — requests go through your real browser session - **Real-time data** from LinkedIn, not cached or stale datasets - **Minimal risk of LinkedIn restrictions** — behaves like natural browsing The Chrome extension must be installed and active on at least one team member's browser within the last 48 hours for all features (including the API) to work. ## Key Features ### Social Listening Track LinkedIn for keywords, people, and companies. OutX continuously scans and organizes matching posts into watchlists with AI-powered categorization and relevance scoring. - **Keyword Watchlists** — Describe what you want to track in plain English. OutX generates keywords from your prompt automatically. [Set up keywords →](/documentation/linkedin-social-listening/keyword-watchlist) - **People Tracking** — Monitor posts from specific LinkedIn profiles. [Track people →](/documentation/linkedin-social-listening/people-tracking) - **Company Tracking** — Monitor company pages for posts and activity. [Track companies →](/documentation/linkedin-social-listening/company-watchlist) - **Reddit Tracking** — Monitor Reddit conversations alongside LinkedIn. [Track Reddit →](/documentation/linkedin-social-listening/reddit-tracking) ### Personal Branding & Auto-Engagement Stay active on LinkedIn automatically. Set up rules to like and comment on posts that match your keywords and target people. Comments are AI-generated in a natural tone. - [Get started with auto-engagement →](/documentation/personal-branding/get-started-in-10-minutes) - [How auto-engagement works →](/documentation/linkedin-social-listening/auto-engagement) ### Data Export Export leads from LinkedIn searches into clean, structured data. - **Sales Navigator Export** — Export any Sales Navigator search or list. [Export from Sales Nav →](/documentation/data-export/linkedin-sales-navigator) - **People Search Export** — Export LinkedIn People Search results. [Export from search →](/documentation/data-export/people-search-export) ### API Access Build custom integrations with two API surfaces: - **Watchlists & Engagement API** — CRUD watchlists, retrieve posts, automate likes and comments. [API Quick Start →](/api-reference/quickstart) - **LinkedIn Data API** — Fetch profiles, get posts, like, comment. Async with task polling. [LinkedIn API Quick Start →](/linkedin-api/quickstart) ## Pricing Free plan available with 2 watchlists. Pro from $49/mo. [See all plans →](/documentation/pricing-and-subscription) ## Frequently Asked Questions OutX is a LinkedIn social listening, personal branding, and API platform. It tracks keywords, monitors profiles and companies, automates engagement, and provides API access to LinkedIn data — all through a Chrome extension that runs in the background. Yes. OutX runs through the Chrome extension on your local browser. It simulates normal LinkedIn browsing behavior — the same as you manually scrolling, liking, and commenting. OutX does not take your cookies, passwords, or any credentials. It does not use proxies, headless browsers, or scraping. The risk of LinkedIn restrictions is minimal because it behaves like natural browsing. OutX requires the Chrome extension to be active — your browser needs to be open with the extension running. If your computer is off or the browser is closed, watchlist scanning and engagement actions will pause and resume when the browser is open again. The extension must have been active within the last 48 hours for the API to work. No. OutX tracks public LinkedIn posts across the platform, not just from your connections. It scans posts based on your keywords regardless of whether you are connected to the author. You do not need to manually edit keywords. Go to your watchlist settings and edit the prompt — OutX automatically regenerates the keywords from your updated prompt. This is the easiest way to refine what you are tracking. After creating a watchlist, it takes a couple of minutes for the first posts to appear in your feed. The Chrome extension processes watchlist tasks in the background and populates results on the next scan cycle. Yes. When using the engagement features (via API or auto-engagement rules), you can set `actor_type` to `"company"` and provide your company name. The like or comment will be posted from your company's LinkedIn page. Yes. On Expert and Ultimate plans, the location filter is available in the feed sidebar. This filter works by detecting country names mentioned in post content. You can also filter posts by geography using the API with appropriate search terms. Install the Chrome extension, go to LinkedIn Sales Navigator, run a search or open a saved list, and click the OutX export button. The data is saved to your OutX database where you can download it as a spreadsheet. [Step-by-step guide →](/documentation/data-export/linkedin-sales-navigator) OutX operates through the Chrome extension installed on each user's browser. Each team member manages their own LinkedIn session. You can add team members to your OutX team so everyone's activity is coordinated under one dashboard, but each person's extension runs on their own browser. To cancel your subscription or delete your account, contact [support@outx.ai](mailto:support@outx.ai) from your registered email address. [More details →](/resources/account-management) The count shows the total number of posts matching your watchlist filters. Posts are paginated at 20 per page, so you can calculate total pages by dividing count by 20. Watchlists are for social listening — they continuously scan LinkedIn for posts matching your keywords, people, or companies. Databases (in the Data Export section) are for storing exported lead data from Sales Navigator or People Search. They serve different purposes: watchlists monitor conversations, databases store contact data. Yes. The OutX API allows you to build custom integrations. You can create watchlists, retrieve posts, and automate engagement programmatically. Contact [support@outx.ai](mailto:support@outx.ai) for enterprise API access and white-label options. --- # OutX for AI Agents Source: https://outx.ai/docs/ai OutX is built for AI agent integration. Use these resources to connect your AI workflows to LinkedIn data and social listening. ## Get Your API Key Before integrating, get your API key: 1. Visit [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc) and click **"Reveal API Key"** 2. Store it as an environment variable: `export OUTX_API_KEY="your-key"` Or authenticate programmatically via [OTP](/linkedin-api/auth-send-otp) — no browser needed. ## Docs for Agents Four ways to connect OutX to your AI agent: Connect Claude, Cursor, or any MCP-compatible agent to OutX. 20 tools covering the full API. Best for interactive agents. Structured API reference with guardrails, parameter tables, and code examples. Best for system prompts. Concise index of all documentation pages with one-line descriptions. Best for discovery. Complete documentation concatenated into a single file. Best for comprehensive context. ## Quick Start Prompts Copy these prompts into your AI agent to get started: ### Monitor LinkedIn for keywords ```text Use the OutX API (base URL: https://api.outx.ai, auth: x-api-key header) to: 1. Create a keyword watchlist: POST /api-keyword-watchlist with {"keywords": ["your keyword"], "fetchFreqInHours": 6} 2. After the next fetch cycle, retrieve posts: GET /api-posts?watchlist_id=WATCHLIST_ID&sort_by=recent_first 3. Like relevant posts: POST /api-like with {"post_id": "ID_FROM_POSTS", "user_email": "you@company.com"} ``` ### Fetch a LinkedIn profile ```text Use the OutX API (base URL: https://api.outx.ai, auth: x-api-key header) to: 1. Fetch profile: POST /linkedin-agent/fetch-profile with {"profile_slug": "linkedin-slug"} 2. Poll: GET /linkedin-agent/get-task-status?api_agent_task_id=TASK_ID (every 5s until status is "completed") 3. Read profile data from task_output Note: All LinkedIn Data endpoints are async — always poll for results. ``` ## AI Builder Integrations ### MCP (Claude Desktop / Cursor / Claude Code) Install the OutX MCP server for full API access via natural language: ```bash npx outx-mcp-server ``` See [MCP Server setup guide](/integrations/mcp) for configuration details. ### Skill File (System Prompts) Add the OutX skill file to your project for static API context: ```bash curl -o outx-skill.md https://outx.ai/docs/outx-skill.md ``` Reference it in your `CLAUDE.md` or Cursor rules to give the AI agent full API context. ### Any LLM / Agent Framework Include the skill file content in your system prompt, or point your agent to `https://outx.ai/docs/llms.txt` for documentation discovery. See also the [LangChain](/integrations/langchain) and [Python SDK](/integrations/python-sdk) integrations. ## What's Next Create watchlists and retrieve posts via API Fetch LinkedIn profiles in 2 minutes Full API documentation Connect AI agents to OutX via MCP --- # Pricing & Subscription Source: https://outx.ai/docs/documentation/pricing-and-subscription ## Pricing Plans Overview OutX.ai pricing is divided into three core product categories: 1. **Social Listening for LinkedIn** 2. **Personal Branding** 3. **LinkedIn Sales Navigator Scraper** You can view the live pricing page here: --- ## Social Listening for LinkedIn Designed for teams and businesses that want to monitor LinkedIn keywords, profiles, and engagement signals in real time. ### Pro Plan: **$49/month** **Limits & Features** - 5 Private Watchlists - 10 Team Members - 100 OutX Credits - 2 Auto-Engagement Rules per Watchlist - 4/12/24 hrs Frequency of Fetching - Email Notification - 45 Days Historical Data - Email Support - CSV Exports - API Access - AI-powered Sentiment Analysis --- ### Expert Plan: **$249/month (Most Popular)** **Limits & Features** - Location Filter - 20 Private Watchlists - 25 Team Members - 500 OutX Credits - 5 Auto-Engagement Rules per Watchlist - 4/12/24 hrs Frequency of Fetching - Email Notification + Slack - Track Comments from Specific Profiles - 180 Days Historical Data - Email/Slack Support - CSV Exports - API Access - Advanced AI-powered Sentiment Analysis --- ### Ultimate Plan: **$999/month** **Limits & Features** - Location Filter - 100 Private Watchlists - Unlimited Team Members - 2000 OutX Credits - 10 Auto-Engagement Rules per Watchlist - 1/4/12/24 hrs Frequency of Fetching - Email Notification + Slack - Track Comments from Specific Profiles - 720 Days Historical Data - Email/Slack/WA Support - CSV Exports - API Access - Advanced AI-powered Sentiment Analysis --- ## Personal Branding Plans Built for founders, creators, and individuals growing their LinkedIn presence. ### Starter Plan: **Free** **Limits & Features** - 2 Private Watchlists - 5 Team Members - 1 Auto-Engagement Rule per Watchlist - 12/24 hrs Frequency of Fetching - Email Notification - 28 Days Historical Data i - API Access - AI-powered Sentiment Analysis --- ### Pro Plan: **$49/month** **Limits & Features** - 5 Private Watchlists - 10 Team Members - 100 OutX Credits - 2 Auto-Engagement Rules per Watchlist - 4/12/24 hrs Frequency of Fetching - Email Notification - 45 Days Historical Data - Email Support - CSV Exports - API Access - AI-powered Sentiment Analysis --- ## LinkedIn Sales Navigator Scraper This product uses a **credits-based pricing model**, ideal for lead generation teams and agencies. ### Pricing Model - **Base price:** 100 credits - $9/month (billed monthly) - **Credit usage:** - 1 exported lead/account = 1 credit - 1 email found = 1 credit ### Available Credit Packages (billed monthly) - 100 - $9/month (Base plan) - 500 - $29/month - 1,500 - $49/month - 4,000 - $99/month - 8,000 - $149/month - 20,000 - $299/month - 50,000 - $499/month - 100,000 - $899/month - 200,000 - 1699/month - Custom plans available ### Included Features - Sales Navigator lead export - Data cleaning & filtering - Email finder & verifier - LinkedIn URL enrichment - Unlimited Sales Navigator accounts --- ## Subscription Management ### Upgrade or Downgrade - You can change your plan anytime from the Paddle billing section or mail to: support@outx.ai - Upgrades apply immediately. - Downgrades take effect at the next billing cycle. --- ### Subscription Cancellation You can cancel your subscription at any time using either method: **Method 1: Via Paddle Billing Portal** 1. Log in to your OutX account 2. Go to **Settings** → **Billing** 3. Click **Manage Subscription** (opens Paddle billing portal) 4. Click **Cancel Subscription** **Method 2: Via Email** - Send an email to **[support@outx.ai](mailto:support@outx.ai)** from your registered email requesting cancellation **After cancellation:** - Your plan remains active until the end of the current billing period - You will not be charged from the next billing cycle - No partial refunds are issued for unused time - Your data remains accessible until the billing period ends --- ## Team Invitation & Management All paid plans support team collaboration with plan-based limits. ### Team Features - Invite team members via email - Assign access instantly - Manage or remove members anytime - Team limits depend on your current plan - Unlimited seats available for Sales Navigator Scraper Team members inherit access based on the workspace permissions and plan limits. --- ## Pricing FAQs Yes. OutX.ai offers a **Free Personal Branding plan** with 2 watchlists, 5 team members, 1 auto-engagement rule per watchlist, and 28-day historical data. A **credit card is required**, but you are not charged unless you upgrade. Yes. All paid plans include a **7-day free trial** with full access. A **credit card is required**. Cancel before the trial ends to avoid charges. To prevent abuse and ensure uninterrupted access. No charges are made during the free plan or trial. Credits are used to export Sales Navigator leads and find/verify emails. 1 lead or 1 email equals 1 credit. No. Social Listening features require a paid plan. The free plan is limited to Personal Branding. Yes. Free plan: up to 5 members. Paid plans: 10 to unlimited members, depending on the plan. No. Slack alerts are available on Expert and Ultimate plans only. No CSV exports on the free plan. API access is available with limits. Yes, you can cancel at any time. Once canceled, you won't be billed from the next billing cycle. You can cancel via the Paddle billing portal in **Settings → Billing**, or email **[support@outx.ai](mailto:support@outx.ai)**. Yes. You can upgrade anytime. Downgrades apply next billing cycle. Yes. An active LinkedIn Sales Navigator subscription is required. Yes. Custom and agency plans are available on request. Contact [support@outx.ai](mailto:support@outx.ai). --- # Get started in 10 minutes Source: https://outx.ai/docs/documentation/linkedin-social-listening/get-started-in-10-minutes ## **Why use OutX.ai?** Most intent on LinkedIn is shared publicly through posts, comments, and profile updates. OutX.ai helps you capture these signals automatically instead of manually checking LinkedIn. --- ## **How OutX.ai helps with Social Listening** OutX.ai continuously scans LinkedIn for keywords, people, and companies you care about, then organizes updates into a single feed so you can act at the right time. --- ## Setup Your account ## **Step 1: Create Your Account** Click **Try for free** on the OutX.ai website and sign up using **Google login** or **email OTP**. ![Screenshot 2026-02-16 at 2.46.07 PM.png](/images/Screenshot_2026-02-16_at_2.46.07_PM.png) ## **Step 2: Install the Chrome Extension** The OutX.ai Chrome extension connects LinkedIn to your account. - No LinkedIn password required - No cookies or private data accessed - Reads only public LinkedIn content > ⚠️ The extension is mandatory for tracking posts and profiles. > ![Screenshot 2026-02-16 at 2.45.25 PM.png](/images/Screenshot_2026-02-16_at_2.45.25_PM.png) ### Steps to install 1. Click **Install Chrome Extension** 2. Approve the extension in Chrome 3. Keep the extension enabled while using LinkedIn --- ## **Step 3: Select what you want [OutX](https://outx.ai) to do?** After installing the extension, you'll see a **chatbot interface** instead of a setup modal. Here, simply **describe in plain English** what you want to track on LinkedIn or select from pre made prompt customised for you from below. **Examples:** - "Track people talking about buying sales engagement tools" - "Monitor posts mentioning Apollo, ZoomInfo, or sales automation" - "Track founders hiring SDRs in US startups" - "Follow posts from RevOps leaders about outbound" The more clearly you describe your goal, the better OutX.ai can build your watchlist. Outx.ai is designed to support different outbound goals. During setup, you select what you want to achieve: - **Social Listening** - Track **industry keywords**, **competitor mentions**, and **your brand** - Track **people** (leads, prospects, customers) - Personal Branding - Automatically like or comment on relevant posts - Engage with tracked people and companies - Stay active on LinkedIn using simple rules ![Screenshot 2026-02-16 at 12.52.04 PM.png](/images/Screenshot_2026-02-16_at_12.52.04_PM.png) Click **Start Listening** after entering your prompt. This intent selection configures which engines and workflows are activated in your account. --- ## Step 4: Wait While Your Watchlist Is Created OutX.ai analyzes your prompt and automatically: ![Screenshot 2026-02-16 at 1.00.17 PM.png](/images/Screenshot_2026-02-16_at_1.00.17_PM.png) - Generates relevant keywords - Creates a watchlist - Starts scanning LinkedIn This usually takes a few minutes. Once complete, your watchlist will start showing matching posts. --- ## Managing Your Watchlist Click on Configuration. ![Screenshot 2026-02-16 at 1.17.57 PM.png](/images/Screenshot_2026-02-16_at_1.17.57_PM.png) ### Edit Keywords (Optional) ![Screenshot 2026-02-16 at 1.19.04 PM.png](/images/Screenshot_2026-02-16_at_1.19.04_PM.png) You can review and update the suggested keywords anytime: - Add new keywords - Remove irrelevant ones - Adjust wording to match your niche ![Screenshot 2026-02-16 at 1.19.50 PM.png](/images/Screenshot_2026-02-16_at_1.19.50_PM.png) --- ### Labels (Optional) Labels help organize posts inside a watchlist. Use labels to: - Group similar posts - Understand why a post was captured - Route signals to the right workflow Example labels: - Buying Intent - Hiring - Competitor Mention - Lead ![Screenshot 2026-02-16 at 1.20.44 PM.png](/images/Screenshot_2026-02-16_at_1.20.44_PM.png) --- ## How to Add People or Companies ### 1. Open a Watchlist Go to any existing watchlist, or create a new one using the chatbot. --- ### 2. Add LinkedIn Profile or Company URLs Paste the LinkedIn profile or company page URLs you want to track. You can add: - Individual LinkedIn profiles - Company pages - Multiple URLs at once OutX.ai will automatically recognize each profile or company. ![Screenshot 2026-02-16 at 1.21.40 PM.png](/images/Screenshot_2026-02-16_at_1.21.40_PM.png) --- ### 3. Save Once saved, OutX.ai begins monitoring these profiles in the background. --- ### **Engage with tracked people** - **Manual engagement:** Reply thoughtfully using AI-suggested comments - **Automatic engagement:** Engage using rules to stay consistent 🔗 *Read more about people and company tracking* --- ## **Optional: Personal Branding with Auto Engagement** You can enable auto engagement to build your personal brand by staying visible on LinkedIn. - Automatically like or comment on relevant posts - Engage from personal or company accounts - Fully controlled by rules This step is optional and can be enabled anytime. --- ## **You're Live** In under 10 minutes, you've: - Connected LinkedIn - Set up keyword or people tracking - Started capturing signals - Begun engaging with posts OutX.ai now runs in the background so you don't have to. --- ## Frequently Asked Questions OutX.ai tracks **public LinkedIn activity**, including: - Posts - Profile updates (job or company changes) - Company page posts - Hiring and job-related updates - Birthdays (when publicly visible) - Keyword-based conversations Yes. You can track **individual LinkedIn profiles** and see their public posts and profile changes in one feed. Yes. You can track **company pages**, competitors, and target accounts to monitor posts and major updates. Yes. You can track **keywords, brands, competitors, and industry topics** mentioned in public LinkedIn posts. Yes. OutX.ai surfaces **public job changes, hiring posts, and role updates**. Yes, **if they're publicly visible** on LinkedIn. No. OutX.ai does **not** track individual comments on posts. No. Likes and reactions are **not tracked**. No. OutX.ai only reads **public LinkedIn content**. No DMs, passwords, or private data. --- # Keyword Watchlist Source: https://outx.ai/docs/documentation/linkedin-social-listening/keyword-watchlist [OutXAI](http://Outx.ai) uses a combination of: - Partial keyword matching - Exact keyword matching - Negative keyword exclusions Set **fetch frequency** and **notification preferences** to stay updated without overwhelm. > Too Long? Check out this Video → --- ## **Why Keyword Tracking?** - Buying, hiring, and research intent is often shared openly in LinkedIn posts - Keyword tracking helps you catch these conversations as soon as they happen - You no longer need to manually search or scroll LinkedIn - You can respond faster with better context and timing --- ## **How OutX.ai Helps with Keyword Tracking** OutX.ai continuously scans LinkedIn for keywords you define or describe in plain English. It groups matching posts into organized watchlists with labels for clarity. You see all relevant conversations in a single feed, updated automatically. From there, you can engage manually or automate engagement using simple rules. --- ## Quick Setup Guide ### **1. Create a Watchlist** Click "**+"** along with watchlist to create a new watchlist. A watchlist is where you tell OutX.ai *what kind of LinkedIn posts you want to monitor*. ![Screenshot 2026-02-16 at 2.54.07 PM.png](/images/Screenshot_2026-02-16_at_2.54.07_PM.png) --- ### **2. Add a Prompt (What should we track?)** Instead of manually setting up keywords right away, you can simply **describe what you want to track in plain English**. Think of this as telling OutX.ai *what kind of conversations you care about*. **Example prompts (under 200 characters):** - "People hiring remote engineers" - "Founders talking about CRM tools" - "Posts about outbound sales or lead generation" OutX.ai uses this prompt to suggest relevant keywords for your watchlist. ![Screenshot 2026-02-16 at 12.52.04 PM.png](/images/Screenshot_2026-02-16_at_12.52.04_PM.png) Once done [Outx.ai](http://Outx.ai) will make your watchlist --- ### **Primary Keywords** These are the **main words or phrases** OutX.ai looks for in LinkedIn posts. Use keywords that directly relate to your intent. Examples: - "hiring remote" - "looking for developers" - "CRM recommendation" Posts containing these keywords will be considered relevant. ![Screenshot 2026-02-16 at 2.57.11 PM.png](/images/Screenshot_2026-02-16_at_2.57.11_PM.png) --- ### **Must Also Include Keywords** Use this when a post should contain **more than one condition** to be relevant. Example: Track posts only if they mention: - "hiring" **and** - "remote" This helps reduce noise and improves accuracy. ![Screenshot 2026-02-16 at 3.00.17 PM.png](/images/Screenshot_2026-02-16_at_3.00.17_PM.png) --- ### **Excluded Keywords** These keywords tell OutX.ai **what to ignore**. If a post contains an excluded keyword, it will not appear-even if it matches your main keywords. Examples: - "internship" - "freelance" - "agency" This is useful for filtering out irrelevant posts. ![Screenshot 2026-02-16 at 3.01.39 PM.png](/images/Screenshot_2026-02-16_at_3.01.39_PM.png) --- ### **4. Intent** Intents help you **categorize posts inside a watchlist**. Instead of putting everything in one bucket, labels let you: - Group similar posts together - Quickly understand *why* a post was captured - Route signals to the right people or workflows **Intent Name** A short category name, such as: - *Remote Hiring* - *Tool Comparison* - *Buying Intent* **Intent Description** A short explanation of what this label represents. This makes it easier to: - Review posts faster - Share context with teammates ![Screenshot 2026-02-16 at 3.03.39 PM.png](/images/Screenshot_2026-02-16_at_3.03.39_PM.png) --- ### **5. Advanced Watchlist Settings & Notifications** Fine-tune how and when you're notified: - **Fetch frequency**: How often OutX.ai scans LinkedIn (e.g., every 12 hours) - **Team access**: Add teammates to the watchlist - **Slack integration**: Drop in your webhook URL to receive real-time alerts ![Screenshot 2026-02-16 at 3.04.44 PM.png](/images/Screenshot_2026-02-16_at_3.04.44_PM.png) --- ### 6. Feed Finally you have a live feed where you can posts with your targeted keywords. ![Screenshot 2026-02-16 at 3.06.10 PM.png](/images/Screenshot_2026-02-16_at_3.06.10_PM.png) You can use filters to figure on left side to narrow down on your posts, to learn more about filters click here --- ## How to edit Keyword watchlist ### 1. Open Watchlist Navigate to **Watchlist you want to update** from the main dashboard. Click the **configuration(Gear icon)** on right side panel. ![Screenshot 2026-02-16 at 3.08.01 PM.png](/images/Screenshot_2026-02-16_at_3.08.01_PM.png) --- ### 2. Edit Watchlist Configuration Clicking the gear icon, you will be taken to the watchlist configuration screen. ![Screenshot 2026-02-16 at 3.09.39 PM.png](/images/Screenshot_2026-02-16_at_3.09.39_PM.png) From here, follow the **same steps used when creating a keyword watchlist**, including: - Adding, removing, or modifying keywords ![Screenshot 2026-02-16 at 3.10.43 PM.png](/images/Screenshot_2026-02-16_at_3.10.43_PM.png) - Updating intents ![Screenshot 2026-02-16 at 3.11.24 PM.png](/images/Screenshot_2026-02-16_at_3.11.24_PM.png) - Adjusting any alert or tracking settings ![Screenshot 2026-02-16 at 3.12.01 PM.png](/images/Screenshot_2026-02-16_at_3.12.01_PM.png) --- ### 4. Save Changes Click Update watchlist to apply your updates. The watchlist will immediately start tracking data based on the updated configuration. **How to delete a keyword watchlist?** Click on the three dots menu, then click the delete button. ![Screenshot 2026-02-16 at 3.12.29 PM.png](/images/Screenshot_2026-02-16_at_3.12.29_PM.png) --- ## Frequently Asked Questions Yes! OutX's keyword module supports hashtags as keywords. OutX supports partial matching, so minor misspellings often still match. Yes. Put the full phrase in the "must also include" category to track exact multi-word keywords. Add keywords you don't want to track in the excluded keywords section. Posts containing those keywords won't be tracked. Yes. You can monitor comments from a set of LinkedIn profiles. Comment tracking is available on Expert and Ultimate plans. Edit the watchlist anytime and delete keywords or labels as needed. Your plan may have limits, but OutX supports high-volume tracking for enterprise users. Yes, you can filter posts based on location if the post mentions the country you are targeting. All posts associated with that keyword will be **permanently removed** from the watchlist results. New posts will start appearing from the moment the keyword is added. Previously published posts will not be backfilled. No. Editing a watchlist does **not reset the entire watchlist**. Only data related to removed keywords is deleted. Yes. You can edit a keyword watchlist at any time, and changes apply after you save. The configuration steps are the same. The only difference is that editing starts by clicking the **pencil icon** on an existing watchlist instead of creating a new one. You cannot directly edit the prompt text after creation. However, you can achieve the same result by editing the watchlist's **keywords, must-also-include keywords, and excluded keywords** through the gear icon. If your watchlist is returning irrelevant results (e.g., job posts when you want sales discussions), add specific excluded keywords like "hiring", "we're hiring", "open to work", "job opening" to filter them out. Yes. On **Expert** and **Ultimate** plans, the **Location Filter** is available in the feed sidebar. This filter works by detecting country names mentioned in post content. Go to your watchlist feed, open the filters panel on the left, and select the countries you want to focus on. Note: this filters by content mentions, not by the author's profile location. Yes. OutX tracks public LinkedIn posts across the platform, not just from your connections. It scans posts based on your keywords regardless of whether you're connected to the author. When you create a watchlist using a prompt, OutX generates an **objective** from your prompt and scores each post 1-10 on relevance to that objective. The default sort for prompt-based watchlists is **Relevance**, showing the most relevant posts first. You can switch to **Popularity** (by engagement) or **Recent** (by post date) using the sort dropdown. If your watchlist returns too many irrelevant posts, try these fixes: - Add **excluded keywords** to filter out noise (e.g., "hiring", "internship", "freelance") - Add **must-also-include keywords** to require multiple conditions - Make your primary keywords more specific - Use the **Intent** filter in the feed sidebar to focus on specific categories ## Learn More - [Keyword Tracking Guide](https://www.outx.ai/blog/keyword-tracking-guide) - [LinkedIn Social Listening Guide](https://www.outx.ai/blog/guide-social-listening-linkedin) - [LinkedIn Monitoring Guide](https://www.outx.ai/blog/linkedin-monitoring-guide-2025) - [Track LinkedIn Mentions](https://www.outx.ai/blog/track-linkedin-mentions) - [LinkedIn Social Listening Platform](https://www.outx.ai/social-listening-linkedin) --- # People Watchlist Source: https://outx.ai/docs/documentation/linkedin-social-listening/people-tracking **OutXAI's LinkedIn profile tracking** monitors selected profiles automatically and delivers organized updates. ### How It Works - Add LinkedIn profiles to monitor - OutXAI scans profiles every 12 hours - Get clean feeds of posts, updates, and activity - Organize with watchlists, labels, and notifications **Track:** CEOs, CTOs, competitors, customers, influencers - all in one place. > Too Long? Check out this Video → --- ## Quick Setup Guide ### **1. Create Watchlist** Click "**+"** along with watchlist to create a new watchlist and click on people A people watchlist lets you **track specific LinkedIn profiles** and get notified when something changes like new posts, job updates, or activity. ![Screenshot 2026-02-16 at 2.54.07 PM.png](/images/Screenshot_2026-02-16_at_2.54.07_PM.png) --- ### **2. Add Profiles** This step defines **which LinkedIn profiles OutX.ai should monitor**. Examples: - *Key Prospects* - *Target Founders* - *Hiring Managers – US* This helps when you manage multiple people watchlists. ![Screenshot 2026-02-16 at 3.13.48 PM.png](/images/Screenshot_2026-02-16_at_3.13.48_PM.png) This will create your people watchlist --- ### **3. Set Intents** Intents help you **group people's post inside a watchlist**. Instead of tracking everyone the same way, labels let you: - Segment posts by role, intent, or priority - Filter updates more easily - Understand *why* someone is being tracked **Intent Name** A short category name such as: - *Startup Mentors* - *High-Intent Leads* - *Decision Makers* **Intent Description** Add a short note explaining who belongs in this label. This makes it easier for you and your team to stay aligned. ![Screenshot 2026-02-16 at 3.15.22 PM.png](/images/Screenshot_2026-02-16_at_3.15.22_PM.png) --- ### **4. Advanced Watchlist Settings & Notifications** Fine-tune how and when you're notified: - **Fetch frequency**: How often OutX.ai scans LinkedIn (e.g., every 12 hours) - **Team access**: Add teammates to the watchlist - **Slack integration**: Drop in your webhook URL to receive real-time alerts ![Screenshot 2026-02-16 at 3.16.16 PM.png](/images/Screenshot_2026-02-16_at_3.16.16_PM.png) ### Feed OutX.ai now tracks all selected LinkedIn profiles automatically, delivering relevant updates without manual checking. ![Screenshot 2026-02-16 at 3.17.46 PM.png](/images/Screenshot_2026-02-16_at_3.17.46_PM.png) You can use filters to figure on left side to narrow down on your posts, to learn more about filters click here. --- ## How to edit people watchlist? ### 1. Open Watchlist Navigate to **Watchlist you want to update** from the main dashboard. Click the **configuration(Gear icon)** on right side panel. ![Screenshot 2026-02-16 at 3.18.14 PM.png](/images/Screenshot_2026-02-16_at_3.18.14_PM.png) ### 2. Edit in database Click on edit in database then add people in selected list. ![Screenshot 2026-02-16 at 3.19.07 PM.png](/images/Screenshot_2026-02-16_at_3.19.07_PM.png) --- ### 3. Import Profiles Within the list, click the **three dots (⋯)** in the **top right corner**, and then select **Import**. ![Screenshot 2026-01-08 at 5.06.40 PM.png](/images/defb0a76-5bc1-4008-8bb3-4d557b2a5802.png) --- ### 4. Add or Update Profiles You can now update the list of people to be tracked in two ways: - **Manual Import** – Paste LinkedIn profile URLs or enter them one-by-one. - **CSV Import** – Upload a CSV file containing LinkedIn profile URLs. ![Screenshot 2026-01-08 at 5.09.24 PM.png](/images/8671c43a-f0c1-488d-88be-a66d93605380.png) Make any additions or removals needed. 💡 ### How to delete People watchlist? - Click on three dots and then click on delete button ![Screenshot 2026-02-16 at 3.20.21 PM.png](/images/Screenshot_2026-02-16_at_3.20.21_PM.png) --- ## Frequently Asked Questions No, OutX only tracks publicly available data to stay compliant with LinkedIn's rules. No, LinkedIn does not allow third-party tools to access private connection data. If a user blocks you on LinkedIn, OutX cannot fetch their posts anymore. Depends on your plan — from 25 profiles on Starter to 5,000 profiles on Ultimate. Yes, OutX supports this in the profile tracking module. Yes, you can filter posts based on location if the post mentions the country you are targeting. Removing a profile will stop tracking that person going forward. Previously collected activity for that profile may be retained depending on your plan and retention settings. Yes. You can import multiple LinkedIn profiles at once using a **CSV** file via the import option. This is useful when updating large lists. The core setup steps are the same as creating a watchlist. The only extra actions are: 1. Clicking the **edit (pencil) icon** to open the existing watchlist. 2. Navigating to the associated list and using the **import** option to update profiles. Yes. You can update a People Watchlist as often as needed. Changes apply once you save the updated list. Yes. OutX can track public LinkedIn posts from any profile, regardless of whether you are connected to them. However, some profiles with strict privacy settings may have limited visibility. The fetch frequency depends on your watchlist settings and plan. You can configure it to check every 1, 4, 12, or 24 hours depending on your plan tier. Pro plans support 4/12/24 hour intervals, while Ultimate plans can fetch as frequently as every 1 hour. You can track up to 500-1,500+ profiles in a single people watchlist, depending on your plan. Use the CSV import feature for adding large batches of profiles at once. Yes. OutX detects job changes for tracked profiles. When a tracked person updates their LinkedIn title or moves to a new company, this shows up in your feed as a signal you can act on. --- ## Learn More - [People Tracking Guide](https://www.outx.ai/blog/people-tracking-guide) - [LinkedIn Prospecting Guide](https://www.outx.ai/blog/linkedin-prospecting-2025-guide) - [LinkedIn Monitoring Guide](https://www.outx.ai/blog/linkedin-monitoring-guide-2025) --- # Company Watchlist Source: https://outx.ai/docs/documentation/linkedin-social-listening/company-watchlist ## How It Works - Add LinkedIn companies to monitor - OutXAI scans companies every 12 hours - Get clean feeds of posts, updates, and activity - Organize with watchlists, labels, and notifications" ## Quick Setup Guide ### **1. Create Watchlist** Click "**+"** along with watchlist to create a new watchlist and click on company A company watchlist lets you **track specific LinkedIn company** and get notified when something changes like new posts, job updates, or activity. ![Screenshot 2026-02-16 at 2.54.07 PM.png](/images/Screenshot_2026-02-16_at_2.54.07_PM.png) --- ### **2. Add Company** This step defines **which LinkedIn company OutX.ai should monitor** then click on start listening Examples: - *Key companies* This helps when you manage multiple company watchlists. ![Screenshot 2026-02-16 at 3.21.42 PM.png](/images/Screenshot_2026-02-16_at_3.21.42_PM.png) This will create your company watchlist --- ### **3. Set Intents** Intents help you **group company's post inside a watchlist**. Instead of tracking everyone the same way, labels let you: - Segment posts by role, intent, or priority - Filter updates more easily - Understand *why* someone is being tracked **Intent Name** A short category name such as: - *Startup* - *High-Intent Leads* - *Decision Makers* **Intent Description** Add a short note explaining who belongs in this label. This makes it easier for you and your team to stay aligned. ![Screenshot 2026-02-16 at 3.15.22 PM.png](/images/Screenshot_2026-02-16_at_3.15.22_PM.png) --- ### **4. Advanced Watchlist Settings & Notifications** Fine-tune how and when you're notified: - **Fetch frequency**: How often OutX.ai scans LinkedIn (e.g., every 12 hours) - **Team access**: Add teammates to the watchlist - **Slack integration**: Drop in your webhook URL to receive real-time alerts ![Screenshot 2026-02-16 at 3.16.16 PM.png](/images/Screenshot_2026-02-16_at_3.16.16_PM.png) ### Feed OutX.ai now tracks all selected LinkedIn company automatically, delivering relevant updates without manual checking. ![Screenshot 2025-12-25 at 12.27.35 PM.png](/images/Screenshot_2025-12-25_at_12.27.35_PM.png) You can use filters to figure on left side to narrow down on your posts, to learn more about filters click here. --- ## How to edit company watchlist? ### 1. Open Watchlist Navigate to **Watchlist you want to update** from the main dashboard. Click the **configuration(Gear icon)** on right side panel. ![Screenshot 2026-02-16 at 3.18.14 PM.png](/images/Screenshot_2026-02-16_at_3.18.14_PM.png) ### 2. Edit in database Click on edit in database then add company in selected list. ![Screenshot 2026-02-16 at 3.19.07 PM.png](/images/Screenshot_2026-02-16_at_3.19.07_PM.png) --- ### 3. Import Profiles Within the list, click the **three dots (⋯)** in the **top right corner**, and then select **Import**. ![Screenshot 2026-01-08 at 5.06.40 PM.png](/images/Screenshot_2026-01-08_at_5.06.40_PM.png) --- ### 4. Add or Update company You can now update the list of company to be tracked in two ways: - **Manual Import** – Paste LinkedIn company URLs or enter them one-by-one. - **CSV Import** – Upload a CSV file containing LinkedIn company URLs. ![Screenshot 2026-01-08 at 5.09.24 PM.png](/images/Screenshot_2026-01-08_at_5.09.24_PM.png) Make any additions or removals needed. 💡 ### How to delete company watchlist? - Click on three dots and then click on delete button ![Screenshot 2026-02-16 at 3.20.21 PM.png](/images/Screenshot_2026-02-16_at_3.20.21_PM.png) --- ## Frequently Asked Questions No, OutX only tracks publicly available data to stay compliant with LinkedIn's rules. No, LinkedIn does not allow third-party tools to access private connection data. If a user blocks you on LinkedIn, OutX cannot fetch their posts anymore. Depends on your plan usually from 25 profiles to 5000 profiles in ultimate. Yes, OutX supports this in the company tracking module. Yes, you can filter posts based on location if the post mentions the country you are targeting for. Removing a company will stop tracking that company going forward. Previously collected activity for that company may be retained depending on your plan and retention settings. Yes you can import multiple LinkedIn companies at once using a **CSV** file via the import option. This is useful when updating large lists. Yes you can update a company Watchlist as often as needed. Changes apply once you save the updated list. --- ## Learn More - [Company Tracking Guide](https://www.outx.ai/blog/company-tracking-guide) - [LinkedIn Social Listening Guide](https://www.outx.ai/blog/guide-social-listening-linkedin) - [LinkedIn Monitoring Guide](https://www.outx.ai/blog/linkedin-monitoring-guide-2025) --- # Feed & Filters Source: https://outx.ai/docs/documentation/linkedin-social-listening/feed-and-filters ## **What the Feed Shows** Your feed displays LinkedIn activity captured from: - **Keyword tracking** - Posts mentioning tracked keywords - Conversations around competitors, features, pricing, or topics - **People tracking** - Posts from tracked profiles - Job changes and role updates - Company posts shared by tracked people - Birthday updates ![Screenshot 2026-02-24 at 4.33.34 PM.png](/images/Screenshot_2026-02-24_at_4.33.34_PM.png) Only content that matches your **watchlists** appears in the feed. --- ## **Why Filters Matter** As you track more keywords and people, the volume of updates increases. Filters help you: - Reduce noise - Focus on high-intent conversations - Prioritize the right people or posts - Decide what to engage with first Think of filters as a way to **turn a live feed into an actionable workspace**. --- ## **Feed Filters (Explained)** These filters work across both **keyword-based** and **people-based** feeds. --- ### **1. Interactions** Use this to show posts that already have engagement. Helpful when you want to: - Join active conversations - Avoid engaging on posts with no visibility --- ### **2. People Filter** *(People tracking only)* Use this filter to focus on **specific individuals**. You can: - Search for a person by name - Select one or more tracked profiles Useful when: - Preparing for outreach - Focusing on a single prospect or account --- ### **3. Intents** Intents are the most powerful way to organize your feed. **Intents** are applied to: - **Keyword posts** (based on intent or topic) - **Tracked people** (based on role, priority, or segment) Examples: - Competitor Reviews - Pricing Analysis - CTO Prospects - Customers Use Intents to: - Group posts or people by intent - Quickly understand *why* something appeared - Apply different engagement strategies **Tip:** Start with Intents before applying other filters. --- ### **4. Seniority Level** Filter feed items based on who is posting. Available levels: - Entry Level - Manager - Senior - Director - VP - CXO / Founder Useful when: - You want decision-maker conversations only - You want to tailor engagement by role --- ### **5. Post Type** Control what kind of updates you see. Filter by: - People posts - Company posts - Job updates - Birthday updates Examples: - Only track hiring-related updates - Only engage with original posts --- ### **6. Posted Date** Filter updates by recency. Use this when: - You want to engage early - You only care about recent activity --- ### **7. Language Filter** Use **Show only English posts** to: - Reduce language noise - Keep engagement consistent Especially useful for global tracking. --- ### **8. Trending Posts** Use **Show only trending posts** to: - Focus on posts gaining traction - Prioritize high-visibility conversations Helpful for personal branding and visibility. --- ### **9. Saved Posts** Use **Show only saved posts** to: - Revisit important conversations - Follow up later without losing context This works like a lightweight task list inside the feed. --- ### **10. Location Filter** *(Expert & Ultimate plans only)* Use this filter to see posts based on **location of the poster**. You can filter by: - Country Helpful when you want to: - Track conversations in a specific market - Focus on regional demand or hiring trends - Engage with prospects in target geographies Examples: - Only see posts from the US or Europe - Track keyword conversations happening in India - Focus on regional competitor mentions **Note:** Geolocation filtering is available only on the **Expert** and **Ultimate** plans. --- ## Frequently Asked Questions The feed is where all LinkedIn activity tracked by OutX.ai appears in one place, including posts from tracked keywords and people. No. The feed only shows content that matches your watchlists — either keywords you track or people you follow. Keyword feed shows posts that mention specific topics or phrases. People feed shows updates from specific LinkedIn profiles you track. Both appear in the same feed and can be filtered separately. Filters help reduce noise and let you focus on posts that matter most — by intent, role, post type, or recency. Labels help categorize posts or people by intent or priority. They make it easier to understand *why* a post appears and help you focus on specific use cases like buying intent or hiring. Yes. You can filter posts by seniority level such as Manager, Director, VP, or CXO to focus on decision-makers. It shows posts that already have likes or comments. This is useful when you want to join active conversations instead of engaging on low-visibility posts. It highlights posts that are gaining traction, helping you prioritize high-visibility conversations for engagement or branding. Yes. You can save posts and use the "Show only saved posts" filter to revisit them later for follow-ups. No. Filters only change what you see in the feed. They do not affect tracking, watchlists, or engagement rules. Yes. You can combine multiple filters — labels, seniority, post type, and date — to create a focused view of the feed. The feed updates automatically based on your watchlist settings and fetch frequency. Yes. You can like, comment (manually or with AI), save posts, or let auto-engagement handle it based on your rules. Use filters to narrow the feed, review high-intent posts first, and engage where context and timing matter most. When you create a watchlist using a natural language prompt, OutX extracts an **objective** from your prompt and generates AI categories. Each incoming post is then scored **1-10 on relevance** to that objective. The feed offers three sort options: - **Relevance** (default for prompt-based watchlists) — Shows the most relevant posts first, scored by AI against your watchlist objective - **Popularity** — Sorts by engagement (likes + comments) - **Recent** — Shows the newest posts first You can switch between sort modes using the dropdown at the top of your feed. The total post count is displayed at the top of your feed view. When using the API, the `GET /api-posts` endpoint returns a `count` field in the response showing the total number of matching posts across all pages. Yes, on **Expert** and **Ultimate** plans. The Location Filter in the feed sidebar lets you filter by countries mentioned in post content. This works by detecting country references within the text, not by the author's profile location. Use the **People filter** in the sidebar to select specific profiles. This shows only posts from the selected people within your watchlist, making it easy to focus on key prospects or thought leaders. --- ## Learn More - [LinkedIn Social Listening Guide](https://www.outx.ai/blog/guide-social-listening-linkedin) - [LinkedIn Monitoring Guide](https://www.outx.ai/blog/linkedin-monitoring-guide-2025) - [Best LinkedIn Analytics Tools](https://www.outx.ai/blog/best-linkedin-analytics-tools) --- # Auto like and Auto comment Source: https://outx.ai/docs/documentation/linkedin-social-listening/auto-engagement ### Auto Engagement via Watchlists When Auto Engagement is enabled on a watchlist, OutX.ai monitors new posts in real time. - Posts are picked only if they match your keywords or tracked profiles - You can auto-like, auto-comment, or both - Engagement happens shortly after the post goes live, not days later - This helps you stay visible without checking LinkedIn all day --- ## Step 1: Open a Watchlist Auto Engagement always runs on a **watchlist**. 1. Go to **Watchlists** ![Screenshot 2026-02-16 at 5.12.39 PM.png](/images/Screenshot_2026-02-16_at_5.12.39_PM.png) 2. Click **AI Auto-Engage** ![Screenshot 2026-02-16 at 5.13.08 PM.png](/images/Screenshot_2026-02-16_at_5.13.08_PM.png) 3. Click **Add Your First Rule** ![Screenshot 2026-02-16 at 5.14.17 PM.png](/images/Screenshot_2026-02-16_at_5.14.17_PM.png) Engagement will only happen on posts that appear inside this watchlist. --- ## Step 2: Create Engagement Rule You'll see the **Create Engagement Rule** modal. This is where you define how OutX.ai should engage. ![Screenshot 2026-02-16 at 5.16.00 PM.png](/images/Screenshot_2026-02-16_at_5.16.00_PM.png) --- ### Choose Action Select what OutX.ai should do: - Auto-Like Posts - Auto-Comment on Posts ![Screenshot 2026-02-16 at 5.05.00 PM.png](/images/Screenshot_2026-02-16_at_5.05.00_PM.png) --- ### Choose Account Select which LinkedIn account will be used: - Your personal LinkedIn account - Your connected company page ![Screenshot 2026-02-16 at 5.05.44 PM.png](/images/Screenshot_2026-02-16_at_5.05.44_PM.png) --- ### Set Limit Per Hour Control how many actions can happen per hour. Examples: - 1 per hour - 5 per hour - 10 per hour ![Screenshot 2026-02-16 at 5.06.14 PM.png](/images/Screenshot_2026-02-16_at_5.06.14_PM.png) This keeps engagement natural and safe. --- ## Step 4: Advanced Options (Optional) Use advanced filters to control **which posts qualify for engagement**. You can refine engagement using: - **Filter Intent** – Engage only on posts matching selected intent types (e.g., buying intent, hiring, announcements) - **Filter Profiles** – Limit engagement to specific profiles or profile categories - **Filter Seniority Levels** – Engage only with posts from certain seniority levels (e.g., Founder, VP, Manager) - **Filter Post Types** – Choose which types of posts to engage with (text posts, image posts, job posts, etc.) - **LinkedIn Posted At** – Engage only on posts published within a selected time range These filters help ensure engagement stays **relevant, targeted, and high-quality**. ![Screenshot 2026-02-16 at 5.18.03 PM.png](/images/Screenshot_2026-02-16_at_5.18.03_PM.png) --- ## Step 5: Activate Rule Turn the rule **Active** and click **Create Rule**. OutX.ai will start liking and/or commenting automatically based on your rule. --- ### Manual Engagement with AI Comments For posts that matter more, you can engage manually with help from AI. - View all tracked posts in one place - Click **Generate Comment** to get a relevant, natural reply - Edit the comment before posting - Post only when you are confident with the message This works well for high-value prospects, founders, or personal branding. ## **Step-by-Step: Comment Manually Using AI** ### **Step 1: Open a Tracked Post** Go to any post inside your watchlist feed. This includes posts captured from: - Keywords - Tracked people - Tracked companies --- ### **Step 2: Click on Comment** Open the comment action for the post you want to respond to. This keeps the interaction contextual and focused on that post. ![Screenshot 2025-12-24 at 3.04.08 PM.png](/images/2048112c-b6d0-482b-9cb9-3849623805e0.png) --- ### **Step 3: Click "Suggest Me"** Click **Suggest Me** to generate an AI-written comment. The suggestion is based on: - The post content - Your tracking context - A natural, professional tone ![Screenshot 2025-12-24 at 3.05.12 PM.png](/images/8b71dc65-492b-484e-8a2d-9c61719eddfe.png) ### Customizing Comment Tone and Style You can control how AI-generated comments sound by editing the **Comment prompt** (this is the same thing as "Custom Instructions" - they refer to the same setting). **To find it:** Click the **Gear icon** next to the comment input area: ![Screenshot 2025-12-25 at 12.31.39 PM.png](/images/bd1cd878-f89d-4d0b-8315-33705abda79f.png) Click **Edit** to update the instruction that controls your AI comment tone and style: ![Screenshot 2025-12-25 at 12.30.59 PM.png](/images/c5e450ff-0495-4bbf-9cc2-1a83bb1266f4.png) **Example comment prompts you can use:** - "Write casual, friendly comments. Keep it to 1-2 sentences." - "Be professional and insightful. Reference specific points from the post." - "Write from the perspective of a SaaS founder. Be authentic, not salesy." This setting applies to ALL AI-generated comments on your account. --- ### **Step 4: Post When Ready** Once satisfied, post the comment directly on LinkedIn. If it doesn't feel right, you can simply skip it. --- ### Use Both Together Most teams use both options together: - Auto Engagement for daily visibility - Manual AI comments for important conversations You stay active, relevant, and in control-without turning LinkedIn into a full-time task. --- ## Frequently Asked Questions No. The OutX Chrome extension must be running in your browser for auto-engagement to work. If you close the browser or shut down your computer, auto-engagement pauses and resumes when you open the browser again. Keep Chrome open with the extension enabled for continuous engagement. Click the **Gear icon** next to the comment input when viewing a post. You'll see a field called **"Comment prompt (optional)"** — this is where you write instructions for the AI. For example: "Write casual, friendly comments in 1-2 sentences" or "Be professional and reference specific points from the post." This applies to all AI-generated comments on your account. Yes. When creating an engagement rule, you can choose between your personal LinkedIn account or a connected company page as the actor. Start with **1-5 likes per hour** and **1-3 comments per hour**. OutX has built-in rate limiting to keep your activity natural and safe. Avoid setting very high limits to prevent LinkedIn from flagging your account. Yes. Use the **Advanced Options** when creating a rule to filter by Intent, specific Profiles, Seniority Levels, Post Types, and time range. This ensures engagement stays targeted and relevant. Comments are posted from the team member selected in the engagement rule. Check which account is set in the rule settings — it may be using a different team member's LinkedIn account. Admin can change this in the rule configuration. No. OutX does not sell likes. It automates engagement from real accounts you control on posts that match your watchlists. --- ## Learn More - [Automate LinkedIn Likes & Comments](https://www.outx.ai/blog/automate-linkedin-likes-comments) - [How to Automate LinkedIn Likes Safely](https://www.outx.ai/blog/linkedin-auto-liker) - [How to Automate LinkedIn Comments](https://www.outx.ai/blog/linkedin-auto-commentor) - [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026) --- # Reddit Tracking Source: https://outx.ai/docs/documentation/linkedin-social-listening/reddit-tracking OutX supports Reddit as an additional social listening channel alongside LinkedIn. You can track keyword-based conversations happening on Reddit and surface relevant posts in your feed. --- ## Why Track Reddit? Reddit is where many professionals, developers, and buyers discuss tools, share opinions, and ask for recommendations - often more candidly than on LinkedIn. Tracking Reddit helps you: - Catch buying intent ("looking for a tool that does X") - Monitor brand and competitor mentions - Discover product feedback and feature requests - Find community discussions relevant to your market --- ## How Reddit Tracking Works Reddit tracking uses the same keyword watchlist system as LinkedIn tracking: 1. **Create a keyword watchlist** with Reddit tracking enabled 2. OutX monitors Reddit for posts matching your keywords 3. Matching posts appear in your watchlist feed alongside LinkedIn posts 4. You can filter your feed to show only Reddit posts or only LinkedIn posts --- ## Setting Up Reddit Tracking ### Step 1: Create a Keyword Watchlist Follow the same steps as creating a [LinkedIn keyword watchlist](/documentation/linkedin-social-listening/keyword-watchlist): 1. Click **"+"** to create a new watchlist 2. Enter your tracking prompt or keywords 3. Configure must-include and excluded keywords ### Step 2: Enable Reddit When configuring your watchlist, enable Reddit tracking in the watchlist settings. This tells OutX to monitor Reddit in addition to LinkedIn. ### Step 3: View Reddit Posts Once enabled, Reddit posts will appear in your watchlist feed. You can use the platform filter to show: - All posts (LinkedIn + Reddit) - LinkedIn posts only - Reddit posts only --- ## Reddit vs LinkedIn Tracking | Feature | LinkedIn | Reddit | |---------|----------|--------| | Keyword monitoring | Yes | Yes | | Post content tracking | Yes | Yes | | Profile tracking | Yes | No | | Company tracking | Yes | No | | Auto-like | Yes | No | | Auto-comment | Yes | No | | Fetch frequency | Configurable | Every 12 hours | --- ## Frequently Asked Questions **Can I track specific subreddits?** Reddit tracking works through keyword matching across Reddit, not by subscribing to specific subreddits. Posts are matched based on your watchlist keywords regardless of which subreddit they appear in. --- **Can I auto-engage on Reddit posts?** No. Auto-like and auto-comment features are currently available only for LinkedIn posts. Reddit posts are tracked for monitoring and intelligence purposes. --- **How often are Reddit posts fetched?** Reddit posts are fetched approximately every 12 hours. --- **Do I need a Reddit account for tracking?** No. Reddit tracking works without needing a Reddit account connected to OutX. --- **Can I export Reddit posts?** Reddit posts appear in your watchlist feed and can be viewed alongside LinkedIn posts. Export options follow the same rules as your plan's CSV export capabilities. --- # Get started in 10 minutes Source: https://outx.ai/docs/documentation/personal-branding/get-started-in-10-minutes Instead of manually liking and commenting on posts, you tell OutX.ai: - **Where** to engage (keywords, people, or companies) - **What** to do (like, comment, or both) - **How often** to engage OutX.ai handles the rest. --- ## Why Use Auto Engagement? Consistency and timing are critical on LinkedIn. Auto Engagement helps you: - Show up early on relevant posts - Stay visible without daily effort - Build relationships at scale - Grow your personal brand naturally --- ## How Auto Engagement Works Auto Engagement always runs on a **watchlist**. ![Screenshot 2026-02-16 at 3.26.29 PM.png](/images/Screenshot_2026-02-16_at_3.26.29_PM.png) During onboarding (or later), you: 1. Select **Personal Branding** 2. Choose where you want to auto-engage: - Keyword watchlists - People watchlists - Company watchlists ![Screenshot 2026-02-16 at 5.03.41 PM.png](/images/Screenshot_2026-02-16_at_5.03.41_PM.png) 3. Create engagement rules OutX.ai then monitors posts and applies your rules automatically. --- # Choose Where You Want to Auto-Engage You can enable Auto Engagement on one or more of the following: ### Keyword Watchlists Engage with posts related to specific topics or conversations. Best for: - Personal branding - Thought leadership - Industry conversations --- ### People Watchlists Engage as soon as specific people post. Best for: - Sales & outbound - Relationship building - Staying top-of-mind --- ### Company Watchlists Engage with posts from specific companies. Best for: - Target accounts - Competitor pages - Partner companies --- # Create Your Engagement Rule Once you choose a watchlist, click **Add Your First Rule**. You'll see the **Create Engagement Rule** screen. --- ## Step 1: Choose an Action Select what OutX.ai should do: - Auto-Like Posts - Auto-Comment on Posts ![Screenshot 2026-02-16 at 5.05.00 PM.png](/images/Screenshot_2026-02-16_at_5.05.00_PM.png) --- ## Step 2: Choose Account Select which LinkedIn account will be used: - Your personal account - Your company page (if connected) ![Screenshot 2026-02-16 at 5.05.44 PM.png](/images/Screenshot_2026-02-16_at_5.05.44_PM.png) --- ## Step 3: Set Limit Per Hour Control how many actions happen per hour. Examples: - 1 per hour - 5 per hour - 10 per hour ![Screenshot 2026-02-16 at 5.06.14 PM.png](/images/Screenshot_2026-02-16_at_5.06.14_PM.png) This keeps activity safe and natural. --- ## Step 4: Advanced Options (Optional) Use advanced filters to control **which posts qualify for engagement**. You can refine engagement using: - **Filter Intent** – Engage only on posts matching selected intent types (e.g., buying intent, hiring, announcements) - **Filter Profiles** – Limit engagement to specific profiles or profile categories - **Filter Seniority Levels** – Engage only with posts from certain seniority levels (e.g., Founder, VP, Manager) - **Filter Post Types** – Choose which types of posts to engage with (text posts, image posts, job posts, etc.) - **LinkedIn Posted At** – Engage only on posts published within a selected time range These filters help ensure engagement stays **relevant, targeted, and high-quality**. --- ## Step 5: Activate Rule Turn the rule **Active** and click **Create Rule**. OutX.ai will start liking and/or commenting automatically based on your rule. --- # What Happens After Setup Once enabled: - OutX.ai monitors posts in real time - Applies your engagement rules - Likes or comments automatically - Logs every action You can pause, edit, or delete rules anytime. --- # You're Live In under 10 minutes, you've: - Chosen where to auto-engage - Created engagement rules - Enabled automation - Started building your LinkedIn presence OutX.ai now grows your visibility in the background so you don't have to. ## Frequently Asked Questions Yes. When creating an engagement rule, you can select your company page as the account to use. Comments and likes will then be posted as the company rather than your personal profile. Start conservatively with 1-5 likes per hour and 1-3 comments per hour. These limits help keep your activity looking natural and reduce the risk of LinkedIn flagging your account. You can adjust limits over time as you monitor results. --- # How to Automate Likes & Comments? Source: https://outx.ai/docs/documentation/personal-branding/how-to-automate-likes-comments-to-boost-engagement Auto-engagement lets your team auto-like and auto-comment on LinkedIn posts that match your watchlists — keeping you active and visible without manual effort. > Too Long? Watch this → ## How It Works 1. **Create a watchlist** with keywords, people, or companies you want to engage with 2. **Set up an engagement rule** — choose auto-like, auto-comment, or both 3. **Pick the account** — your personal LinkedIn or your company page 4. **Set a safe limit** — control how many actions per hour (start with 1–5) 5. **Activate** — OutX handles the rest automatically For the detailed step-by-step guide with screenshots, see [Auto Engagement Setup →](/documentation/linkedin-social-listening/auto-engagement) ## Key Settings | Setting | What It Does | |---------|-------------| | **Action** | Auto-Like, Auto-Comment, or both | | **Account** | Personal LinkedIn or Company Page | | **Limit per hour** | Controls engagement frequency (1–10 per hour) | | **Intent filter** | Engage only on posts matching specific intents | | **Profile filter** | Limit engagement to specific profiles | | **Seniority filter** | Engage only with posts from certain seniority levels | | **Post type filter** | Choose text, image, video, or job posts | ## Customizing Comment Tone You can control how AI-generated comments sound by editing the **Comment prompt**. Click the **Gear icon** next to the comment input when viewing a post. Example prompts: - "Write casual, friendly comments. Keep it to 1-2 sentences." - "Be professional and insightful. Reference specific points from the post." - "Write from the perspective of a SaaS founder. Be authentic, not salesy." This setting applies to all AI-generated comments on your account. ## Best Practices - Start with low limits (1–3 likes per hour, 1–2 comments per hour) - Keep Chrome open — auto-engagement only works while the extension is active - Use intent and seniority filters to keep engagement targeted - Review your [Activity log](/documentation/personal-branding/activity) regularly ## Frequently Asked Questions No. The Chrome extension must be running for auto-engagement to work. If you close Chrome or shut down your computer, engagement pauses and resumes when you reopen Chrome. Click the Gear icon next to the comment input when viewing a post. Edit the "Comment prompt" field with instructions for tone and style. This applies to all AI comments on your account. Yes. When creating a rule, choose your company page as the account. You can have separate rules for personal and company engagement. Start with 1-5 likes per hour and 1-3 comments per hour. OutX has built-in rate limiting, but keeping limits moderate ensures natural activity. See [LinkedIn Safety](/resources/linkedin-safety). No. OutX does not sell likes. It only automates engagement from real accounts you control on posts that match your watchlists. OutX runs through your browser and simulates normal browsing behavior. The risk is minimal when you use moderate limits. See [LinkedIn Safety](/resources/linkedin-safety). Comments are posted from the team member selected in the engagement rule. Check which account is set in the rule — it may be a different team member's account. Admin can change this in the rule settings. --- # How OutX.ai Analyzes Likes & Comments Source: https://outx.ai/docs/documentation/personal-branding/how-outx-analyzes-likes-and-comments ## What We Listen To OutX.ai continuously monitors engagement activity on LinkedIn posts, including: - Comments on posts - Likes and reactions - The people interacting with specific content - The context of the post being engaged with This allows us to go beyond _what people post_ and focus on _what they interact with_. --- ## How OutX.ai Processes Engagement Here's how the Engager works behind the scenes: 1. **Post Identification** We identify relevant LinkedIn posts based on keywords, people, or companies you track. ![Screenshot 2026-02-24 at 4.51.29 PM.png](/images/Screenshot_2026-02-24_at_4.51.29_PM.png) 2. **Engagement Capture** OutX.ai captures: - Who liked the post - Who commented ![Screenshot 2026-02-24 at 4.52.11 PM.png](/images/Screenshot_2026-02-24_at_4.52.11_PM.png) 3. **Signal Creation** These interactions are converted into structured list you can later act on. ![Screenshot 2026-01-21 at 10.12.00 AM.png](/images/Screenshot_2026-01-21_at_10.12.00_AM.png) 4. **Import the List** - Click on Add people to list ![Screenshot 2026-02-24 at 4.53.31 PM.png](/images/Screenshot_2026-02-24_at_4.53.31_PM.png) --- ## What You Can Do With This Data Using Engager insights, you can: - Identify high-intent prospects earlier - Spot buyers who don't create posts but actively engage - Understand what topics your ICP reacts to - Prioritize outreach based on real interest --- ## How This Fits Into OutX.ai The Engager works alongside: - Keyword tracking - People and company tracking Together, they help you see **not just content**, but **behavior**. > ⚠️ Note: The Engager experience is still evolving. --- ## FAQs **Q1: What does Engager do?** It analyzes likes and comments on LinkedIn posts to surface intent signals. --- **Q2: What kind of engagement is tracked?** Likes, reactions, and comments on relevant LinkedIn posts. --- **Q3: Why analyze engagement instead of just posts?** Many high-intent users don't post but actively like or comment. --- **Q4: Does it read comment text?** Yes, when available, comment content is analyzed with post context. --- **Q5: Does Engager auto-like or comment?** No. It only listens and analyzes engagement. --- **Q6: Is this safe for my LinkedIn account?** Yes. Engager focuses on analysis, not automation. --- **Q7: Is it live for everyone?** Availability may vary as the feature rolls out. --- # Activity Source: https://outx.ai/docs/documentation/personal-branding/activity ## **Why the Activity Section Exists** When engagement is automated, visibility becomes important. The Activity page helps you: - See exactly **what actions were taken** - Track **likes vs comments** - Review engagement by **team member** - Stay confident and in control of automation Think of it as an audit trail for your LinkedIn activity. --- ## **What You'll See in the Activity Page** The Activity page shows: - Posts you've **liked** - Posts you've **commented on** - Engagement done via: - Auto-engagement rules - Manual actions - Engagement from: - Your personal account - Team members (if applicable) ![Screenshot 2026-02-24 at 4.57.25 PM.png](/images/Screenshot_2026-02-24_at_4.57.25_PM.png) If no actions have been taken yet, you'll see a simple empty state indicating no activity. --- ## **Activity Feed** At the center of the page is the **activity feed**. This feed lists: - The LinkedIn post - The type of interaction (like or comment) - When the action happened This makes it easy to review past engagement or confirm that rules are working as expected. ![Screenshot 2026-02-24 at 4.58.27 PM.png](/images/Screenshot_2026-02-24_at_4.58.27_PM.png) --- ## **Filters in the Activity Section** Filters help you narrow down activity quickly. ### **Interaction Type** Use this to filter by: - Likes - Comments Helpful when you want to: - Review only comments - Audit likes separately ![Screenshot 2026-02-24 at 4.59.03 PM.png](/images/Screenshot_2026-02-24_at_4.59.03_PM.png) --- ### **Team Member Filter** If you're working with a team, you can filter activity by: - A specific team member - Your own account This helps understand **who engaged with what**, especially in shared workflows. --- ### **Reset Filters** Use **Reset** to clear all filters and return to the full activity view. --- ## **Engagement Insights (Right Panel)** On the right side, you'll see a simple **activity summary**. This shows: - Total likes over time - Total comments over time - Activity from the last few days It gives a quick snapshot of how active your LinkedIn engagement has been. --- ## **How This Helps You Day-to-Day** The Activity section is useful when you want to: - Verify that auto-engagement rules are running - Review comments for quality and tone - Track team-level engagement - Monitor consistency over time You don't need to guess - everything is visible. ## Frequently Asked Questions Yes. The Activity page shows the engagement type for each action, including whether it was performed by an auto-engagement rule or manually. It also displays which account performed the action. Yes. You can filter the activity feed by team member to see who engaged with what. This is especially useful for teams running shared engagement workflows across multiple LinkedIn accounts. --- # Get Started in 10 Minutes Source: https://outx.ai/docs/documentation/data-export/get-started-in-10-minutes ## **Why Use Data Export?** Finding the right people on LinkedIn is easy, but turning searches into usable data is slow and manual. Data Export helps you move faster from LinkedIn search results to outreach-ready lists. --- ## **How OutX.ai Helps with Data Export** OutX.ai extracts structured profile data directly from LinkedIn searches. You get clean lists that can be enriched, filtered, and exported-ready for sales or recruiting workflows. --- ## **Choose How You Want to Export Data** OutX.ai supports **two ways to export LinkedIn data**. Choose the one that fits how you search on LinkedIn. ![Screenshot 2025-12-25 at 2.37.56 PM.png](/images/Screenshot_2025-12-25_at_2.37.56_PM.png) --- ## **Option 1: Download Sales Navigator data** Use this when you already rely on **LinkedIn Sales Navigator** for prospecting. ### **What this is best for** - Advanced filters and ICP targeting - Account-based or role-based searches - High-quality outbound lists --- ### **How to download via Sales Navigator** 1. Open a **Sales Navigator search** 2. Paste the search URL into OutX.ai 3. Review the number of profiles detected 4. Start the export OutX.ai pulls profiles from the search and saves them into a list. You can export large result sets in one go. --- ## **Option 2: Export from LinkedIn People Search** Use this when you don't use Sales Navigator and rely on **standard LinkedIn search**. ### **What this is best for** - Simple people searches - Smaller, focused lists - Quick exports without Sales Navigator ![Screenshot 2025-12-25 at 2.39.07 PM.png](/images/Screenshot_2025-12-25_at_2.39.07_PM.png) --- ### **How to Export via People Search** 1. Run a **LinkedIn People Search** 2. Copy the search URL 3. Paste it into OutX.ai 4. Start the export OutX.ai extracts all visible profiles and stores them in a list. --- ## **What Data You Get** Each exported profile is converted into structured fields such as: - Name - LinkedIn profile URL - Current role and company - Location - Company details The data is clean and consistent, ready to use immediately. ![image.png](/images/image.png) --- ## **Email & Data Enrichment (Optional)** After export, you can enrich profiles if needed. You can add: - Work emails - Additional company information - Other contact fields This prepares your list for: - CRM imports - Email outreach - Sales or recruiting workflows You choose when and what to enrich. --- ## **How Data Export Works with Social Listening** Data Export works best when combined with signals. A common workflow: 1. Track hiring or buying intent using social listening 2. Identify relevant people or roles 3. Export them into a list 4. Reach out with context This helps avoid cold, generic outreach. ## Frequently Asked Questions Only if you want to export from Sales Navigator searches. The People Search export works with standard LinkedIn search and does not require a Sales Navigator subscription. Usually 5-10 minutes depending on the number of results. Smaller exports complete faster. The Chrome extension must remain active during the export process. --- # LinkedIn Sales Navigator Export Source: https://outx.ai/docs/documentation/data-export/linkedin-sales-navigator ## 1. Select the "Type of export" Select what you want to export from LinkedIn ### Sales navigator export - Using this you can scrape the profiles from LinkedIn sales navigator scraper - You can Copy the sales navigator URL or press export on the page. ![image.png](/images/lsn-image.png) ## **2. Create your Sales Navigator lead list** Once the Chrome extension is installed, go to the list of leads you want to export. It can be: 1. Brief Download 2. Detailed Download With No Emails 3. Detailed Download With Emails [OutX](https://outx.ai) handles all the use cases. ![image.png](/images/lsn-image-1.png) Fill out all the information in the form ![image.png](/images/lsn-image-2.png) Outx.ai will export all these leads in real-time. That makes your lead generation process **GDPR-compliant**, in opposition to using databases. ## **3. Download your cleaned list** After the extraction is done, you will get an email. This email will have a link to download your lead list in a CSV file. ![image.png](/images/lsn-image-3.png) Outx.ai does much more than export your list. It also **cleans all the names and company names** of your LinkedIn contacts. The data on **LinkedIn is not clean.** Cleaning data from your sales navigator export can take hours if you do it manually. The **Outx.ai cleaning algorithm** takes care of all this work for you by automatically cleaning: 1. First names 2. Last names 3. Company names 4. Job titles Nobody wants to spend hours cleaning Excel files. Better let robots do this boring job. ## Frequently Asked Questions Yes. OutX extracts data directly from your Sales Navigator searches and lists, so you must have an active subscription. No. Sales Navigator does not offer built-in export. OutX enables safe exporting through its Chrome Extension. OutX can export **up to 2,500 results per Sales Navigator search**. For standard LinkedIn People Search, exports support up to 2,500 results per search as well. Yes. All data comes directly from your own LinkedIn session, keeping the workflow **GDPR-compliant** and secure. Yes. The Chrome Extension powers the on-page *Export* button and allows OutX to fetch data in real time. Exports are delivered as **CSV files**, ready for CRMs, enrichment tools, or cold email sequences. Yes. OutX automatically cleans first names, last names, job titles, and company names to deliver a polished dataset. Yes. Choose **Detailed Download With Emails** if you want email fields included (availability depends on LinkedIn visibility). On an average it takes 5-10 minutes to export a LinkedIn sales navigator list. If your Sales Navigator export is stuck at 0%, try the following: 1. **Check your Sales Navigator subscription** - You need an active LinkedIn Sales Navigator subscription for this feature to work 2. **Check the Chrome extension** - Make sure the OutX extension is installed, enabled, and your browser is open 3. **Check LinkedIn login** - Ensure you are logged into LinkedIn in the same browser where the extension is running 4. **Try refreshing** - Close and reopen the export page, then try again 5. **Try a smaller search** - If your search has thousands of results, try narrowing it down and exporting a smaller batch first 6. **Contact support** - If none of the above works, email **[support@outx.ai](mailto:support@outx.ai)** with your export URL and we'll investigate Currently, OutX supports exporting **leads** (people) from Sales Navigator. Company/account-level export from Sales Navigator is not yet available but is on our roadmap. --- ## Learn More - [LinkedIn Sales Navigator Guide](https://www.outx.ai/blog/linkedin-sales-navigator) - [Sales Navigator Filters Guide](https://www.outx.ai/blog/linkedin-sales-navigator-filter) - [Build a Targeted Lead List with Sales Navigator](https://www.outx.ai/blog/build-targeted-lead-list-linkedin-sales-navigator) - [Get Emails from Sales Navigator](https://www.outx.ai/blog/get-emails-linkedin-sales-navigator) --- # People Search Export Source: https://outx.ai/docs/documentation/data-export/people-search-export ## 1. Select the "Type of export" Select what you want to export from LinkedIn ### People Search Export - Using this you can scrape the profiles from LinkedIn Search results ![image.png](/images/pse-image.png) ### 2. LinkedIn People search URL - You can Copy the people search URL - You can also directly press export to take the results straight to Outx.ai ![Screenshot 2025-12-23 at 9.13.49 AM.png](/images/Screenshot_2025-12-23_at_9.13.49_AM.png) ## **2. Create your People search lead list** Fill out all the information in the form ![Screenshot 2025-12-23 at 9.16.20 AM.png](/images/Screenshot_2025-12-23_at_9.16.20_AM.png) Outx.ai will export all these leads in real-time. That makes your lead generation process **GDPR-compliant**, in opposition to using databases. ## **3. Download your cleaned list** After the extraction is done, you will get an email. This email will have a link to download your lead list in a CSV file. ![image.png](/images/pse-image-1.png) Outx.ai does much more than export your list. It also **cleans all the names and company names** of your LinkedIn contacts. The data on **LinkedIn is not clean.** Cleaning data from your people search results can take hours if you do it manually. The **Outx.ai cleaning algorithm** takes care of all this work for you by automatically cleaning: 1. First names 2. Last names 3. Company names 4. Job titles Nobody wants to spend hours cleaning Excel files. Better let robots do this boring job. ## Frequently Asked Questions OutX automates outbound by tracking intent, profiles, engagement, and exporting LinkedIn data at scale. You can export **up to 2,500 results per search** from People Search. Yes OutX uses human-like timing and throttling to keep engagement activity safe. Yes you can track unlimited keywords, profiles, and signals simultaneously. Yes. The OutX Chrome Extension is required to export data from LinkedIn People Search. Founders, agencies, SDR teams, and operators who rely on LinkedIn for outbound. On an average it takes 5-10 minutes to export a people search export. --- # Database Source: https://outx.ai/docs/documentation/data-export/lists Databases help you organize, filter, enrich, and export contacts that you've collected from: - [**Sales Navigator searches**](/documentation/data-export/linkedin-sales-navigator) - [**LinkedIn People Search exports**](/documentation/data-export/people-search-export) This is your source of truth for outbound-ready contacts. ## **Why databases Exist** When you export data from LinkedIn, you need a place to: - Store contacts in an organized way - Segment people and companies - Enrich and export only what you need The databases section helps you move from **raw LinkedIn data → usable lead databases**. --- ## **What You'll Find in the databases Section** Each list contains: - People profiles (name, role, company, location) - Associated company details - Date the profile was added - LinkedIn profile links - Enrichment status (if applied) Databases can be used later for: - Outreach - CRM import - Tracking - Engagement workflows --- ## **List Overview** At the top of each list, you'll see: - **List name** - **Total contacts in the list** - Quick actions like: - Refresh - Enrich - Select multiple profiles Each row represents one person in the list. --- ## **Selecting Profiles** You can: - Select individual profiles - Use **Select All** to choose the entire list This is useful when you want to: - Enrich contacts in bulk - Export a subset of people - Apply actions to multiple profiles at once --- ## **Filters in databases** Filters help you narrow large databases into smaller, targeted segments. ### **Personal Filters** Use these to filter by individual attributes: - **Name** – Search for a specific person - **Current Job Title** – Target roles like CTO, Founder, Manager - **Location** – Filter by geography Useful when you want to reach a specific persona. --- ### **Company Filters** Use these to filter by company information: - **Company Name** - **HQ Location** - **Industry** Helpful for account-based targeting or regional campaigns. --- ### **Email & Contact Filters** Use these to qualify your list: - **Email status** (available, not available, enriched) - **Has phone number** This helps you export only **contactable leads**. --- ### **Apply & Reset Filters** - Click **Apply** to update the list based on filters - Use **Reset** to clear all filters and return to the full list --- ## **Profile Preview Panel** When you click on a person, a side panel opens showing: - Profile details - Company information - Recent LinkedIn context (if available) This lets you quickly review a contact without leaving the list. --- ## **Enrichment** The **Enrich** button allows you to: - Add work emails - Add phone numbers (if available) - Complete missing company data You can enrich: - Selected profiles - Or the entire list This prepares your list for outreach or CRM sync. --- ## **How databases Fit Into Your Workflow** databases are typically used after: 1. Exporting people from Sales Navigator or LinkedIn Search 2. Filtering and segmenting contacts 3. Enriching selected profiles 4. Exporting or using them for engagement They act as the **bridge between discovery and action**. ## Frequently Asked Questions Watchlists track LinkedIn activity in real time - they monitor keywords, profiles, and companies for new posts and signals. Lists and databases, on the other hand, organize exported lead data from Sales Navigator or LinkedIn People Search. Watchlists are for monitoring; lists are for storing and managing contacts. Yes. Email enrichment is available directly from the database view. Each email enrichment costs 1 OutX credit. You can enrich individual profiles or entire lists in bulk. --- # OutX API - LinkedIn Social Listening & Automation API Source: https://outx.ai/docs/api-reference/introduction The OutX API lets you interact with LinkedIn programmatically — monitor keywords, track people and companies, fetch profiles, and automate engagement. All endpoints share the same base URL and authentication. ## API Overview The API is organized into two groups: Create watchlists that continuously monitor LinkedIn for keywords, people, and companies. Retrieve AI-categorized posts and automate engagement. Fetch LinkedIn profiles, get posts, like and comment — direct, on-demand API calls. All endpoints are async with task polling. --- ## Watchlists & Engagement Create watchlists that continuously scan LinkedIn. OutX enriches posts with AI-generated categories and relevance scores. | Category | Endpoints | What You Can Do | |----------|-----------|-----------------| | **Keyword Watchlists** | POST/GET/PUT/DELETE `/api-keyword-watchlist` | Monitor LinkedIn posts by keywords with advanced filtering | | **People Watchlists** | POST/GET/PUT/DELETE `/api-people-watchlist` | Track posts and activity from specific LinkedIn profiles | | **Company Watchlists** | POST/GET/PUT/DELETE `/api-company-watchlist` | Monitor company LinkedIn pages and posts | | **Posts** | GET `/api-posts` | Retrieve and filter posts with 15+ parameters | | **Like** | POST `/api-like` | Like posts programmatically | | **Comment** | POST `/api-comment` | Comment on posts programmatically | --- ## LinkedIn Data Fetch profiles, get posts, and engage — no watchlists needed. All LinkedIn Data endpoints are **async**: submit a request, get a task ID, then [poll for results](/linkedin-api/get-task-status). | Endpoint | What You Can Do | |----------|-----------------| | POST `/linkedin-agent/fetch-profile` | Fetch any LinkedIn profile by slug | | POST `/linkedin-agent/fetch-profiles-posts` | Get posts from specific profiles by URN | | POST `/linkedin-agent/like-post` | Like a LinkedIn post | | POST `/linkedin-agent/comment-post` | Comment on a LinkedIn post | | GET `/linkedin-agent/get-task-status` | Check async task results | [See LinkedIn Data endpoints →](/linkedin-api/introduction) --- ## Base URL All API requests should be made to: ``` https://api.outx.ai ``` ## Authentication All endpoints require an API key in the `x-api-key` header: ```bash x-api-key: YOUR_API_KEY ``` Get your API key at [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc). ## Prerequisites **Chrome extension required:** At least one team member must have the OutX Chrome extension installed and active within the last 48 hours. Without this, API calls will return a `403` error. [Learn more about the extension →](/resources/chrome-extension) ## Rate Limits | Plan | Rate Limit | |------|-----------| | Free | 100 requests/hour | | Pro | 1,000 requests/hour | | Enterprise | Custom | ## Getting Started Visit [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc) and click "Reveal API Key" Install the [OutX Chrome Extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj) on at least one team member's browser Follow the [Watchlist Quick Start](/api-reference/quickstart) or the [LinkedIn Data Quick Start](/linkedin-api/quickstart) ## Need Help? Create your first watchlist and retrieve posts Fetch your first LinkedIn profile in 2 minutes Common API workflows and patterns Contact our team for help --- ## Learn More - [LinkedIn API Guide - OutX Blog](https://www.outx.ai/blog/linkedin-api-guide) - [LinkedIn Social Listening Platform](https://www.outx.ai/social-listening-linkedin) - [OutX Chrome Extension](https://www.outx.ai/chrome-extension) ## Frequently Asked Questions **Watchlists & Engagement** endpoints are for ongoing monitoring — you create watchlists (keyword, people, or company) and OutX continuously scans LinkedIn, enriches posts with AI categories and relevance scores. **LinkedIn Data** endpoints are for on-demand access — fetch a profile, get posts, like or comment as one-off async tasks. Use watchlists for continuous intelligence, and LinkedIn Data for direct lookups or AI agent integrations. API access is available on all plans, including the free plan. Rate limits vary: Free allows 100 requests/hour, Pro allows 1,000 requests/hour, and Enterprise plans have custom limits. Contact [support@outx.ai](mailto:support@outx.ai) for higher throughput. OutX does not currently offer webhooks. Use a polling pattern — periodically call `/api-posts` with `sort_by=recent_first` to check for new posts. You can also set up Slack notifications through the OutX UI. See the [Webhook-Style Monitoring](/api-reference/use-cases#webhook-style-monitoring-polling-pattern) use case. --- # Authentication Source: https://outx.ai/docs/api-reference/authentication All OutX API endpoints require authentication using an API key. This ensures secure access to your data and protects your account. ## Getting Your API Key To obtain your API key: 1. Log in to your OutX account 2. Visit [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc) 3. Click **"Reveal API Key"** to view your key 4. Copy and securely store your API key ### Programmatic Authentication (OTP) For AI agents, CLI tools, and automation, you can obtain your API key programmatically without a browser: 1. **[Send OTP](/linkedin-api/auth-send-otp)** — `POST /linkedin-agent/auth-send-otp` with your email 2. **[Verify OTP](/linkedin-api/auth-verify-otp)** — `POST /linkedin-agent/auth-verify-otp` with the 6-digit code from your email The verify response includes your `api_key` directly. Keep your API key secure and never share it publicly. Treat it like a password. ## Using Your API Key Include your API key in the `x-api-key` header of every API request: ### Header Format ```bash x-api-key: YOUR_API_KEY ``` ### Example Request ```bash cURL curl -X GET \ "https://api.outx.ai/api-keyword-watchlist" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript const response = await fetch("https://api.outx.ai/api-keyword-watchlist", { headers: { "x-api-key": "YOUR_API_KEY", }, }); ``` ```python Python import requests headers = { 'x-api-key': 'YOUR_API_KEY' } response = requests.get( 'https://api.outx.ai/api-keyword-watchlist', headers=headers ) ``` ```php PHP ``` ## Chrome Extension Requirement All API calls require that at least one team member has the OutX Chrome extension installed and active within the last **48 hours**. This is because OutX retrieves LinkedIn data through the browser extension - it doesn't use unofficial scraping or LinkedIn's restricted API. If no team member has an active extension, you'll receive: ```json { "error": "Plugin installation required: Please install the OutX browser extension on at least one team member's account to use the API. The plugin must have been active within the last 48 hours." } ``` **How to fix:** Install the [OutX Chrome Extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj), sign into LinkedIn in the same browser, and keep the browser open. The extension needs to have been active within the last 48 hours. For more details, see [Chrome Extension Guide](/resources/chrome-extension). --- ## Authentication Errors ### 401 Unauthorized This error occurs when: - No API key is provided - The API key is invalid or expired - The API key format is incorrect **Response:** ```json { "error": "Unauthorized" } ``` **Solution:** Verify that you're including the correct API key in the `x-api-key` header. ### 403 Forbidden This error occurs when: - You're trying to access resources that don't belong to your team - Your API key doesn't have permission for the requested operation **Response:** ```json { "error": "Access denied: You don't have permission to access this resource" } ``` **Solution:** Ensure you're only accessing resources associated with your account. ## Best Practices - Never commit API keys to version control - Use environment variables or secure key management systems - Rotate keys periodically for enhanced security - Always use HTTPS for API requests - Never send API keys over unencrypted connections - Track your API usage to stay within rate limits - Set up alerts for unusual activity - Review API logs regularly - Implement proper error handling in your code - Retry failed requests with exponential backoff - Log authentication errors for debugging ## Rate Limiting API rate limits are enforced per API key. See [Rate Limits](/api-reference/rate-limits) for full details on request limits, daily task limits, and plan-based quotas. | Plan | Requests per Hour | |------|------------------| | Free | 100 | | Pro | 1,000 | | Enterprise | Custom | For error handling and troubleshooting, see [Error Codes](/api-reference/errors). ## Team-Based Access Your API key is associated with your team account. This means: - All API requests are scoped to your team's data - You can only access watchlists and posts created by your team - Team members share the same rate limits ## Next Steps Make your first API request Create and manage watchlists ## Frequently Asked Questions Yes. There is one API key per team. All team members use the same key, and all API requests are scoped to your team's data. You can find your shared key at [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc). API key rotation is not currently available as a self-service feature. If you need to rotate your API key for security reasons, contact [support@outx.ai](mailto:support@outx.ai) and the team will generate a new key for you. The most common cause is the Chrome extension requirement. At least one team member must have the OutX Chrome extension installed and actively used within the last 48 hours. Without an active extension, all API calls will return a 403 error. Install the [OutX Chrome Extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj), sign into LinkedIn in the same browser, and keep the browser open. --- # Quick Start Source: https://outx.ai/docs/api-reference/quickstart This guide will help you make your first API requests to OutX and get familiar with the core workflows. ## Prerequisites Before you begin, make sure you have: Get your API key from [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc) All requests go to: `https://api.outx.ai` ## Your First Watchlist Let's create a keyword watchlist to track LinkedIn posts about AI and machine learning. ### Step 1: Create a Keyword Watchlist ```bash cURL curl -X POST \ "https://api.outx.ai/api-keyword-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "AI & ML Trends", "keywords": [ "artificial intelligence", { "keyword": "machine learning", "required_keywords": ["python", "tensorflow"], "exclude_keywords": ["beginner", "tutorial"] } ], "fetchFreqInHours": 12 }' ``` ```javascript JavaScript const response = await fetch( 'https://api.outx.ai/api-keyword-watchlist', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ name: 'AI & ML Trends', keywords: [ 'artificial intelligence', { keyword: 'machine learning', required_keywords: ['python', 'tensorflow'], exclude_keywords: ['beginner', 'tutorial'] } ], fetchFreqInHours: 12 }) } ); const data = await response.json(); console.log(data); ``` ```python Python import requests import json url = 'https://api.outx.ai/api-keyword-watchlist' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'name': 'AI & ML Trends', 'keywords': [ 'artificial intelligence', { 'keyword': 'machine learning', 'required_keywords': ['python', 'tensorflow'], 'exclude_keywords': ['beginner', 'tutorial'] } ], 'fetchFreqInHours': 12 } response = requests.post(url, headers=headers, json=payload) print(response.json()) ``` **Response:** ```json { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "AI & ML Trends", "slug": "ai-ml-trends-550e8400", "type": "keyword", "keywords": ["artificial intelligence", "machine learning"], "fetchFreqInHours": 12, "created": true } ``` Save the `id` from the response - you'll need it to retrieve posts from this watchlist! ### Step 2: Retrieve Posts from Your Watchlist Now let's fetch posts from the watchlist we just created: ```bash cURL curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=550e8400-e29b-41d4-a716-446655440000&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript const watchlistId = '550e8400-e29b-41d4-a716-446655440000'; const response = await fetch( `https://api.outx.ai/api-posts?watchlist_id=${watchlistId}&page=1`, { headers: { 'x-api-key': 'YOUR_API_KEY' } } ); const { data, count } = await response.json(); console.log(`Found ${count} posts`); ``` ```python Python import requests watchlist_id = '550e8400-e29b-41d4-a716-446655440000' url = f'https://api.outx.ai/api-posts' params = { 'watchlist_id': watchlist_id, 'page': 1 } headers = {'x-api-key': 'YOUR_API_KEY'} response = requests.get(url, headers=headers, params=params) result = response.json() print(f"Found {result['count']} posts") ``` **Response:** ```json { "data": [ { "id": "post-123", "content": "Exciting developments in machine learning with Python and TensorFlow...", "author_name": "John Doe", "author_url": "https://linkedin.com/in/johndoe", "linkedin_post_url": "https://linkedin.com/feed/update/...", "posted_at": "2024-01-15T10:30:00Z", "likes_count": 245, "comments_count": 32, "liked": false, "commented": false } ], "count": 156 } ``` ### Step 3: Engage with a Post Let's like one of the posts we retrieved: ```bash cURL curl -X POST \ "https://api.outx.ai/api-like" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "post_id": "post-123", "user_email": "your.email@example.com", "actor_type": "user" }' ``` ```javascript JavaScript const response = await fetch( 'https://api.outx.ai/api-like', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ post_id: 'post-123', user_email: 'your.email@example.com', actor_type: 'user' }) } ); const result = await response.json(); console.log(result.message); ``` ```python Python import requests url = 'https://api.outx.ai/api-like' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'post_id': 'post-123', 'user_email': 'your.email@example.com', 'actor_type': 'user' } response = requests.post(url, headers=headers, json=payload) print(response.json()['message']) ``` **Response:** ```json { "success": true, "message": "Like task created successfully", "task_id": "task-456" } ``` ## Advanced Filtering Examples ### Filter by Date Range Use `start_date` and `end_date` params in `YYYY-MM-DD` format: ```bash curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&start_date=2026-02-01&end_date=2026-02-28" \ -H "x-api-key: YOUR_API_KEY" ``` Dates should be in `YYYY-MM-DD` format (e.g., `2026-02-15`). End dates are inclusive - `end_date=2026-02-28` includes the full day of Feb 28. ### Filter by Seniority Level Filter posts by the author's seniority. You can pass multiple values as comma-separated: ```bash # Single seniority curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&seniority_level=VP" \ -H "x-api-key: YOUR_API_KEY" # Multiple seniority levels curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&seniority_level=VP,Director,CXO" \ -H "x-api-key: YOUR_API_KEY" ``` ### Pagination Use `range_from` and `range_to` params (0-indexed). Default page size is 20: ```bash # First 20 posts (default) curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID" \ -H "x-api-key: YOUR_API_KEY" # Posts 21-40 curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&range_from=20&range_to=39" \ -H "x-api-key: YOUR_API_KEY" ``` ### Sort by Engagement ```bash curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&sort_by=popular_first" \ -H "x-api-key: YOUR_API_KEY" ``` Sort options: `recent` (default), `popular_first` (by engagement), `engagement` (alias for popular_first). --- ## Common Workflows Create a people watchlist to monitor posts from key industry leaders: ```bash curl -X POST \ "https://api.outx.ai/api-people-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "Tech Leaders", "profiles": [ "https://linkedin.com/in/satyanadella", "https://linkedin.com/in/sundarpichai", "elon-musk" ] }' ``` Track posts from competitor company pages: ```bash curl -X POST \ "https://api.outx.ai/api-company-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "Competitors", "companies": [ "https://linkedin.com/company/openai", "https://linkedin.com/company/anthropic", "google-deepmind" ] }' ``` Retrieve trending posts with high engagement: ```bash curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&trending=true&sort_by=engagement" \ -H "x-api-key: YOUR_API_KEY" ``` Like posts on behalf of your company page: ```bash curl -X POST \ "https://api.outx.ai/api-like" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "post_id": "post-123", "user_email": "admin@company.com", "actor_type": "company", "company_title": "Your Company Name" }' ``` ## Next Steps Learn about advanced keyword filtering Explore all post filtering options Automate post likes Add comments programmatically ## Need Help? Have questions or need assistance? Contact us at [support@outx.ai](mailto:support@outx.ai) ## AI Agent Prompt Use the following instructions when building an AI agent that integrates with the OutX Watchlists & Engagement API. ### Prerequisites - API key stored in `OUTX_API_KEY` environment variable - OutX Chrome extension installed and active on at least one team member's browser ### Quick Reference | Action | Method | Endpoint | Key Params | |--------|--------|----------|------------| | Create keyword watchlist | POST | `/api-keyword-watchlist` | `keywords` (required), `name`, `fetchFreqInHours` | | Create people watchlist | POST | `/api-people-watchlist` | `profiles` (required), `name` | | Create company watchlist | POST | `/api-company-watchlist` | `companies` (required), `name` | | Retrieve posts | GET | `/api-posts` | `watchlist_id`, `page`, `sort_by`, `start_date`, `end_date` | | Like a post | POST | `/api-like` | `post_id` (required), `user_email` (required) | | Comment on a post | POST | `/api-comment` | `post_id` (required), `user_email` (required), `comment_text` (required) | ### Guardrails — ALWAYS DO 1. Use `x-api-key` header for authentication 2. Use base URL `https://api.outx.ai` 3. Use ISO 8601 dates (`YYYY-MM-DD`) for `start_date` and `end_date` 4. Use `post_id` from the `/api-posts` response when calling `/api-like` or `/api-comment` 5. Handle 429 rate limit errors with exponential backoff ### Guardrails — NEVER DO 1. Never hardcode API keys in source code 2. Never use `fetchFreqInHours` values other than 1, 3, 6, 12, 24, 48, 72 3. Never call `/api-like` or `/api-comment` without a valid `post_id` and `user_email` 4. Never assume posts appear instantly — new watchlists populate on the next fetch cycle For the full OutX API skill file, see [outx-skill.md](https://outx.ai/docs/outx-skill.md). ## Frequently Asked Questions It depends on the fetch frequency you set (`fetchFreqInHours`). After creating a watchlist, OutX begins scanning LinkedIn on the next fetch cycle. For example, if you set `fetchFreqInHours` to 6, you can expect the first results within 6 hours. You can set it as low as 1 hour for faster initial results. Use the `YYYY-MM-DD` format (ISO 8601 date format). For example, `2026-02-15`. End dates are inclusive — setting `end_date=2026-02-28` includes all posts from the full day of February 28. No. The OutX Chrome extension is required for all API functionality. At least one team member must have the extension installed and active within the last 48 hours. OutX retrieves LinkedIn data through the browser extension rather than using unofficial scraping methods, so the extension is essential for the API to work. --- ## Learn More - [LinkedIn Social Listening Guide](https://www.outx.ai/blog/guide-social-listening-linkedin) - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [LinkedIn Monitoring Guide](https://www.outx.ai/blog/linkedin-monitoring-guide-2025) --- # API Use Cases & Workflows Source: https://outx.ai/docs/api-reference/use-cases ## Sales Signal Detection Monitor LinkedIn for buying intent signals - people talking about problems your product solves, comparing tools, or looking for recommendations. ```bash # 1. Create a keyword watchlist for buying signals curl -X POST "https://api.outx.ai/api-keyword-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "Buying Intent - CRM Tools", "keywords": [ "looking for a CRM", "CRM recommendation", { "keyword": "switching from", "required_keywords": ["CRM", "sales tool"], "exclude_keywords": ["hiring", "job"] } ], "fetchFreqInHours": 6 }' # 2. Retrieve high-intent posts sorted by relevance curl -X GET "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&sort_by=relevance_first" \ -H "x-api-key: YOUR_API_KEY" ``` **What you get:** A continuously updated feed of LinkedIn posts from people actively discussing CRM tools, filtered by your keywords and sorted by AI relevance scoring. --- ## Competitor Monitoring Track what your competitors and their employees are posting on LinkedIn. ```bash # Track competitor company pages curl -X POST "https://api.outx.ai/api-company-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "Competitor Companies", "companies": [ "https://linkedin.com/company/competitor-a", "https://linkedin.com/company/competitor-b", "competitor-c" ] }' ``` **What you get:** Every post from competitor company pages, including announcements, product updates, hiring signals, and thought leadership content. --- ## Hiring & Job Change Alerts Detect when target accounts are hiring or when key contacts change roles. ```bash # Track hiring keywords curl -X POST "https://api.outx.ai/api-keyword-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "Hiring Signals", "keywords": [ { "keyword": "hiring", "required_keywords": ["VP Sales", "Head of"], "exclude_keywords": ["internship", "entry level"] }, "excited to announce", "new role" ], "fetchFreqInHours": 12 }' # Filter by seniority level curl -X GET "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&seniority_level=VP" \ -H "x-api-key: YOUR_API_KEY" ``` --- ## Trending Content Discovery Find the most engaging LinkedIn posts in your industry for content inspiration or engagement opportunities. ```bash # Get trending posts from your watchlist curl -X GET "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&trending=true&sort_by=engagement" \ -H "x-api-key: YOUR_API_KEY" # Filter by post type and date range curl -X GET "https://api.outx.ai/api-posts?watchlist_id=YOUR_ID&post_type=text&start_date=2026-02-01&end_date=2026-03-01&sort_by=engagement" \ -H "x-api-key: YOUR_API_KEY" ``` --- ## Automated Engagement Pipeline Set up a pipeline that monitors posts and automatically engages with relevant content. ```python import requests import time API_KEY = "YOUR_API_KEY" HEADERS = {"x-api-key": API_KEY} BASE = "https://api.outx.ai" # Step 1: Get recent relevant posts posts = requests.get( f"{BASE}/api-posts", headers=HEADERS, params={ "watchlist_id": "YOUR_WATCHLIST_ID", "sort_by": "relevance_first", "page": 1 } ).json() # Step 2: Like the top 5 most relevant posts for post in posts["data"][:5]: if not post.get("liked"): requests.post( f"{BASE}/api-like", headers={**HEADERS, "Content-Type": "application/json"}, json={ "post_id": post["id"], "user_email": "your.email@company.com", "actor_type": "user" } ) time.sleep(30) # Wait between actions for safety ``` --- ## AI Agent Integration Use the [LinkedIn API](/linkedin-api/introduction) to give AI agents direct access to LinkedIn data. ```python import requests import time API_KEY = "YOUR_API_KEY" HEADERS = {"x-api-key": API_KEY, "Content-Type": "application/json"} BASE = "https://api.outx.ai" # Fetch a profile for AI analysis task = requests.post( f"{BASE}/linkedin-agent/fetch-profile", headers=HEADERS, json={"profile_slug": "target-prospect"} ).json() task_id = task["api_agent_task_id"] # Poll until complete while True: status = requests.get( f"{BASE}/linkedin-agent/get-task-status", headers=HEADERS, params={"api_agent_task_id": task_id} ).json() if status["data"]["status"] == "completed": profile_data = status["data"]["task_output"] # Feed profile_data to your AI agent for analysis break time.sleep(5) ``` **Use this for:** Building AI agents that research prospects, generate personalized outreach, or analyze LinkedIn data as part of automated workflows. --- ## Webhook-Style Monitoring (Polling Pattern) OutX doesn't currently offer webhooks, but you can build a polling-based monitoring system: ```python import requests import time API_KEY = "YOUR_API_KEY" HEADERS = {"x-api-key": API_KEY} BASE = "https://api.outx.ai" WATCHLIST_ID = "YOUR_WATCHLIST_ID" seen_posts = set() while True: posts = requests.get( f"{BASE}/api-posts", headers=HEADERS, params={ "watchlist_id": WATCHLIST_ID, "sort_by": "recent_first", "page": 1 } ).json() for post in posts.get("data", []): if post["id"] not in seen_posts: seen_posts.add(post["id"]) # Process new post - send to Slack, CRM, AI agent, etc. print(f"New post by {post['author_name']}: {post['content'][:100]}") time.sleep(3600) # Check every hour ``` --- ## Related Resources Make your first API call Direct LinkedIn data access All post filtering options Guides and tutorials ## Frequently Asked Questions Yes. When calling `/api-posts`, you can pass multiple `watchlist_id` values to retrieve posts from several watchlists at once. You can also omit the `watchlist_id` parameter entirely to get posts from all your team's watchlists in a single request. There are two approaches. First, you can poll the `/api-posts` endpoint periodically with `sort_by=recent_first` and track which post IDs you have already seen (see the polling pattern example above). Second, you can set up Slack notifications directly in the OutX UI to receive alerts in your Slack channels without writing any code. --- ## Learn More - [LinkedIn Social Listening Guide](https://www.outx.ai/blog/guide-social-listening-linkedin) - [LinkedIn Prospecting Guide](https://www.outx.ai/blog/linkedin-prospecting-2025-guide) - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [Automate LinkedIn Likes & Comments](https://www.outx.ai/blog/automate-linkedin-likes-comments) - [Best LinkedIn Lead Generation Tools](https://www.outx.ai/blog/best-linkedin-lead-generation) --- # Error Codes Source: https://outx.ai/docs/api-reference/errors All OutX API errors return a JSON object with an `error` field containing a human-readable message. ```json { "error": "Error message here" } ``` ## Error Codes ### 400 — Bad Request Missing or invalid parameters. Check the error message for specifics. **Watchlist endpoints:** | Error Message | Cause | |---------------|-------| | `keywords array is required and must not be empty` | Keyword watchlist: `keywords` missing, not an array, or empty | | `No valid keywords provided after cleaning` | All keywords are invalid/empty after normalization | | `profiles array is required and must not be empty` | People watchlist: `profiles` missing, not an array, or empty | | `No valid profile identifiers provided` | No profiles passed validation | | `companies array is required and must not be empty` | Company watchlist: `companies` missing, not an array, or empty | | `No valid company identifiers provided` | No companies passed validation | | `Invalid fetchFreqInHours` | Must be one of: 1, 3, 6, 12, 24, 48, 72 | | `Missing required parameter: id` | Watchlist update/delete called without `id` | | `Name cannot be empty` | Watchlist update with empty name | | `No valid update fields provided` | Watchlist update with nothing to change | | `disable must be a boolean value` | Watchlist enable/disable with invalid value | | `Invalid watchlist ID(s)` | Get Posts: `watchlist_id` doesn't exist | **Engagement endpoints:** | Error Message | Cause | |---------------|-------| | `Missing required parameter: post_id` | Like/comment without `post_id` | | `Missing required parameter: user_email` | Like/comment without `user_email` | | `Missing required parameter: comment_text` | Comment without `comment_text` | | `comment_text cannot be empty` | Comment with empty or whitespace-only text | | `Invalid actor_type. Must be 'user' or 'company'` | `actor_type` not `"user"` or `"company"` | | `company_title is required when actor_type is 'company'` | Engaging as company without providing company name | | `Post does not support like functionality (missing social_urn)` | Post has no activity URN (may be deleted) | | `Post does not support comment functionality (missing social_urn)` | Post has no activity URN (may be deleted) | **LinkedIn Data endpoints:** | Error Message | Cause | |---------------|-------| | `Missing or invalid 'profile_slug'` | `fetch-profile` without a valid `profile_slug` string | | `Missing or invalid 'profile_urns' (must be a non-empty array)` | `fetch-profiles-posts` without a valid array of URNs | | `Missing or invalid 'social_urn'` | `like-post` or `comment-post` without a valid `social_urn` | | `Missing or invalid 'comment_text'` | `comment-post` without a valid `comment_text` | | `Missing or invalid 'api_agent_task_id'` | `get-task-status` without a valid task ID | | `Missing or invalid 'email'` | Auth endpoints without a valid email | | `Missing or invalid 'otp'` | `auth-verify-otp` without a valid OTP code | ### 401 — Unauthorized API key is missing or invalid. | Error Message | Cause | |---------------|-------| | `Missing API Key` | No `x-api-key` header in the request | | `Invalid API Key` | The API key does not match any team | | `Invalid or expired OTP` | OTP code is incorrect or has expired (auth-verify-otp) | **Fix:** Include your API key in the `x-api-key` header. Get your key at [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc). ### 402 — Plan Limit Reached Your team has hit a plan-based limit. The error message includes your current limit. | Error Message Pattern | Cause | |----------------------|-------| | `Your plan includes upto N watchlists...` | Watchlist count limit reached | | `Your plan includes total of N likes...` | Daily like limit reached (resets at UTC midnight) | | `Your plan includes total of N comments...` | Daily comment limit reached (resets at UTC midnight) | | `Your plan includes total of N company trackings...` | Company tracking limit reached | | `Your plan includes total of N team members...` | Team member invitation limit reached | | `Your plan allows up to N posts per week per watchlist...` | Weekly post fetch limit per watchlist reached | | `Your plan allows up to N active AI agents per watchlist...` | Auto-engagement rule limit per watchlist reached | **Fix:** Upgrade your plan at [outx.ai/pricing](https://www.outx.ai/#pricing) or wait for daily/weekly limits to reset. Plan limits by tier: - **Free**: 2 watchlists, 1 auto-engagement rule per watchlist, 5 team members - **Pro**: 5 watchlists, 2 auto-engagement rules per watchlist, 10 team members - **Expert**: 20 watchlists, 5 auto-engagement rules per watchlist, 25 team members - **Ultimate**: 100 watchlists, 10 auto-engagement rules per watchlist, unlimited team members ### 403 — Forbidden Access denied. Most commonly caused by the Chrome extension not being active. | Error Message | Cause | |---------------|-------| | `Plugin installation required: Please install the OutX browser extension on at least one team member's account to use the API. The plugin must have been active within the last 48 hours.` | No team member has an active Chrome extension | | `Access denied: You don't have permission to access this resource` | Trying to access another team's resources | | `Access denied: You don't have permission to access these watchlists` | Trying to access watchlists from another team | | `Access denied: You don't have permission to interact with this post` | Trying to engage with a post from another team's watchlist | **Fix for plugin error:** Install the [OutX Chrome extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj), sign into LinkedIn in the same browser, and keep the browser open. The extension must have been active within the last 48 hours. See [Chrome Extension Guide](/resources/chrome-extension). The 403 plugin error is the most common API issue. If you're getting this error, check that: 1. The Chrome extension is installed on at least one team member's browser 2. That browser has been open within the last 48 hours 3. The team member is signed into LinkedIn in the same browser ### 404 — Not Found The requested resource does not exist or belongs to a different team. | Error Message | Cause | |---------------|-------| | `Agent task not found` | LinkedIn Data task ID does not exist or belongs to another team | | `Watchlist not found` | Watchlist ID does not exist or belongs to another team | | `Watchlist not found or access denied` | Watchlist update/delete — ID does not exist or team mismatch | | `List not found or access denied` | Creating watchlist with a `list_id` that doesn't exist | | `Post not found` | The `post_id` in a like/comment request does not exist | | `Tracking list not found` | The post's associated watchlist no longer exists | | `User not found with email: [email]` | The `user_email` is not a member of your team | | `Company not found` | The `company_title` does not match any company page for the admin user | | `No admin user found in the team` | LinkedIn Data engagement — your team has no admin members | | `No company admin found for the specified company` | No admin user manages the specified company page | ### 405 — Method Not Allowed ```json { "error": "Method GET not allowed" } ``` You used the wrong HTTP method. Check the endpoint documentation for the correct method (GET, POST, PUT, DELETE). ### 429 — Rate Limit Exceeded ```json { "error": "Rate limit exceeded. Please try again later." } ``` You have exceeded your plan's API request quota. See [Rate Limits](/api-reference/rate-limits) for details and retry strategies. ### 500 — Internal Server Error An unexpected error occurred on our side. Retry with exponential backoff. If the error persists, contact [support@outx.ai](mailto:support@outx.ai). ## Error Response Format All errors follow the same JSON format: ```json { "error": "Human-readable error message" } ``` For Watchlist API endpoints, some errors may also include additional context: ```json { "error": "Missing required parameter: keywords", "details": "The 'keywords' field must be a non-empty array" } ``` ## Frequently Asked Questions The most common cause is the Chrome extension requirement. At least one team member must have the OutX Chrome extension installed and actively used within the last 48 hours. Install the [OutX Chrome Extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj), sign into LinkedIn in the same browser, and keep the browser open. OutX retrieves LinkedIn data through real browser sessions via the Chrome extension. This error means no team member has had the extension active recently. The extension runs in the background — just keep Chrome open with the extension installed and it will stay active. 402 errors mean you've reached a limit on your current plan. You can either upgrade your plan at [outx.ai/pricing](https://www.outx.ai/#pricing), wait for daily/weekly limits to reset, or delete existing resources (like watchlists) to make room for new ones. Yes. Daily limits (likes, comments) reset at UTC midnight (00:00 UTC). Weekly limits (posts per watchlist) reset on Monday at 00:00 UTC. --- # Rate Limits Source: https://outx.ai/docs/api-reference/rate-limits OutX enforces rate limits at two levels: API request rate limits and daily task limits managed by the Chrome extension. ## API Request Rate Limits API request rate limits are enforced per API key: | Plan | Requests per Hour | |------|------------------| | Free | 100 | | Pro | 1,000 | | Enterprise | Custom | When you exceed the rate limit, you receive a `429` response: ```json { "error": "Rate limit exceeded. Please try again later." } ``` ## Daily Task Limits (Watchlist & Engagement API) All watchlist and engagement tasks run through the Chrome extension on real LinkedIn accounts. Each LinkedIn account (team member) has daily processing limits. ### How Daily Limits Work Every task — keyword scan, profile tracking, like, comment — is executed by a team member's Chrome extension browsing LinkedIn. This means: - **Limits are per LinkedIn account**, not per API key - If you create a watchlist with 200 keywords but the daily keyword scan limit is 40, OutX will process ~40 per day from each active LinkedIn account - **Add more team members** to parallelize — each team member's Chrome extension processes tasks independently - Remaining tasks queue automatically and process on subsequent days Creating a large watchlist doesn't mean all keywords start tracking immediately. Tasks are distributed across your team's active browser sessions and processed within daily limits. Add more team members with active Chrome extensions to increase throughput. ### Watchlist Scanning Limits (per LinkedIn account per day) | Task Type | Daily Limit | |-----------|------------| | Keyword tracking scans | 30 | | Profile tracking scans | 50 | | Company tracking scans | 50 | | Profile comment tracking | 50 | ### Engagement Limits (per user per day) | Task Type | Daily Limit | |-----------|------------| | Post likes | 50 | | Post comments | 25 | Daily limits reset at UTC midnight (00:00 UTC). Weekly limits reset on Monday at 00:00 UTC. ## LinkedIn Data API — No Rate Limiting by OutX **OutX is a proxy to LinkedIn, not a rate limiter.** The LinkedIn Data API (`/linkedin-agent/*` endpoints) passes your requests directly through to LinkedIn via real browser sessions. OutX does **not** throttle, queue, or rate-limit these requests on your behalf. If you send too many requests in a short period, **LinkedIn may flag the underlying account** for unusual activity. OutX cannot protect you from this. ### LinkedIn Data API Task Limits These are daily task creation limits — they cap how many tasks you can *create*, but they do **not** pace your requests: | Task Type | Daily Limit | |-----------|------------| | Profile fetch (`fetch-profile`) | 30 per team | | Posts fetch (`fetch-profiles-posts`) | 30 per team | | Like post (`like-post`) | 50 per team | | Comment on post (`comment-post`) | 25 per team | ### Best Practices by Endpoint Use these as maximum safe throughput guidelines. Lower is always safer. | Endpoint | Daily Limit | Recommended Pace | Max per Hour | |----------|------------|-------------------|--------------| | `fetch-profile` | 30/day | 1 every 2–3 minutes | 3–4 | | `fetch-profiles-posts` | 30/day | 1 every 2–3 minutes | 3–4 | | `like-post` | 50/day | 1 every 1–2 minutes | 5–6 | | `comment-post` | 25/day | 1 every 3–5 minutes | 2–3 | ### Safe Usage Guidelines To avoid LinkedIn flagging the account running the Chrome extension: - **Space out requests** — follow the pace guidelines above; never send back-to-back calls - **Distribute throughout the day** — spread 30 profile fetches across 8+ hours, not in a single burst - **Mix action types** — alternating between fetches, likes, and comments looks more natural than doing all likes first, then all comments - **Keep volumes realistic** — a normal LinkedIn user doesn't view 30 profiles or like 50 posts in an hour - **Add delays in your code** — use `sleep(60)` or `setTimeout(60000)` between API calls in loops - **Monitor the account** — if a team member receives LinkedIn warnings, reduce volume immediately ## Plan-Based Quotas These limits vary by plan and do not reset daily: | Resource | Free | Pro | Expert | Ultimate | |----------|------|-----|--------|----------| | Watchlists | 2 | 5 | 20 | 100 | | Team members | 5 | 10 | 25 | Unlimited | | Auto-engagement rules per watchlist | 1 | 2 | 5 | 10 | | Posts per week per watchlist | 15,000 | 15,000 | 15,000 | 15,000 | When you hit a plan quota, you receive a `402` response with a message describing the limit. See [Error Codes](/api-reference/errors) for details. ## Retry Strategy When you receive a `429` response, use exponential backoff: ```javascript async function fetchWithRetry(url, options, maxRetries = 3) { for (let attempt = 0; attempt < maxRetries; attempt++) { const response = await fetch(url, options); if (response.status === 429) { const waitTime = Math.pow(2, attempt) * 1000; // 1s, 2s, 4s await new Promise(resolve => setTimeout(resolve, waitTime)); continue; } return response; } throw new Error('Rate limit exceeded after retries'); } ``` ## Best Practices - **Batch watchlist creation** — Create multiple watchlists in a single session rather than spreading across hours - **Use appropriate fetch frequency** — Set `fetchFreqInHours` based on how often you actually need new data. Lower frequency = fewer tasks consumed - **Cache API responses** — Store post data locally instead of re-fetching the same posts - **Monitor usage** — Track your daily task consumption to avoid hitting limits unexpectedly - **Use webhooks-style polling** — Instead of frequent polling, check `/api-posts` with `sort_by=recent_first` at reasonable intervals Need higher limits? Contact [support@outx.ai](mailto:support@outx.ai) to discuss enterprise options. --- ## Learn More - [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026) - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) --- # Webhooks Source: https://outx.ai/docs/api-reference/webhooks **Webhooks are coming soon.** This feature is currently under development and not yet available. Sign up below to be notified when webhooks launch. ## Overview Webhooks will allow you to receive real-time HTTP callbacks when events occur in your OutX account, eliminating the need to poll the API for updates. ## Planned Event Types | Event | Description | |---|---| | `watchlist.post.detected` | A new post matching your keyword, people, or company watchlist is found | | `engagement.completed` | An auto-engagement action (like or comment) has been executed | | `engagement.failed` | An engagement action failed to complete | | `task.completed` | An async task (profile fetch, data export, etc.) has finished | | `task.failed` | An async task encountered an error | | `watchlist.created` | A new watchlist was created | | `watchlist.deleted` | A watchlist was removed | ## Payload Format Preview ```json { "id": "evt_abc123", "type": "watchlist.post.detected", "created_at": "2026-03-08T12:00:00Z", "data": { "watchlist_id": "wl_xyz789", "watchlist_type": "keyword", "post": { "id": "post_456", "author": "Jane Doe", "content": "Excited to announce our new product launch...", "url": "https://linkedin.com/feed/update/urn:li:activity:123456", "detected_at": "2026-03-08T12:00:00Z" } } } ``` ## Get Notified When Webhooks Launch Interested in using webhooks? Reach out and we will add you to the early access list. Email **support@outx.ai** to express interest and get notified when webhooks are available. --- # Send OTP - Sign Up or Log In via API Source: https://outx.ai/docs/linkedin-api/auth-send-otp The Send OTP endpoint sends a 6-digit verification code to the provided email address. If no OutX account exists for that email, one will be created automatically when the OTP is verified. This endpoint requires no authentication -- it is the entry point for the auth flow. ## Endpoint ``` POST https://api.outx.ai/linkedin-agent/auth-send-otp ``` ## Request Body The email address to send the OTP to Full name of the user (used when creating a new account) ## Response ```json Response { "success": true, "email": "john@example.com" } ``` ```bash cURL curl -X POST "https://api.outx.ai/linkedin-agent/auth-send-otp" \ -H "Content-Type: application/json" \ -d '{ "email": "john@example.com", "full_name": "John Doe" }' ``` ```javascript JavaScript const response = await fetch( "https://api.outx.ai/linkedin-agent/auth-send-otp", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: "john@example.com", full_name: "John Doe", }), } ); const data = await response.json(); console.log(data); // { success: true, email: "john@example.com" } ``` ```python Python import requests response = requests.post( "https://api.outx.ai/linkedin-agent/auth-send-otp", json={ "email": "john@example.com", "full_name": "John Doe", }, ) print(response.json()) ``` ## Errors | Status | Error | Description | |--------|-------|-------------| | `400` | `Missing or invalid 'email'` | The `email` field is missing or not a valid string | ## Next Step Check your email for the 6-digit OTP, then use [Verify OTP](/linkedin-api/auth-verify-otp) to complete authentication and receive your API key. --- # Verify OTP - Complete Authentication and Get API Key Source: https://outx.ai/docs/linkedin-api/auth-verify-otp The Verify OTP endpoint completes the authentication flow started by [Send OTP](/linkedin-api/auth-send-otp). Submit the 6-digit code from your email to receive your user profile, team details, and API key. For new users, this automatically creates a team and generates an API key. This endpoint requires no authentication -- use the OTP from your email. ## Endpoint ``` POST https://api.outx.ai/linkedin-agent/auth-verify-otp ``` ## Request Body The email address the OTP was sent to The 6-digit OTP from your email ## Response Your unique user ID Your name (from signup or account) Your email address Your team ID Your team name Your API key -- use this in the `x-api-key` header for all OutX API and LinkedIn API requests ```json Response { "user": { "id": "550e8400-e29b-41d4-a716-446655440000", "full_name": "John Doe", "email": "john@example.com" }, "team": { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "name": "John Doe's Team", "api_key": "outx_a1b2c3d4e5f6g7h8i9j0k1l2" } } ``` ```bash cURL curl -X POST "https://api.outx.ai/linkedin-agent/auth-verify-otp" \ -H "Content-Type: application/json" \ -d '{ "email": "john@example.com", "otp": "123456" }' ``` ```javascript JavaScript const response = await fetch( "https://api.outx.ai/linkedin-agent/auth-verify-otp", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ email: "john@example.com", otp: "123456", }), } ); const data = await response.json(); console.log(data.team.api_key); // Your API key ``` ```python Python import requests response = requests.post( "https://api.outx.ai/linkedin-agent/auth-verify-otp", json={ "email": "john@example.com", "otp": "123456", }, ) data = response.json() print(data["team"]["api_key"]) # Your API key ``` ## Errors | Status | Error | Description | |--------|-------|-------------| | `400` | `Missing or invalid 'email'` | The `email` field is missing or not a valid string | | `400` | `Missing or invalid 'otp'` | The `otp` field is missing or not a valid string | | `401` | `Invalid or expired OTP` | The OTP is incorrect or has expired (OTPs expire after 1 hour) | If the OTP has expired, call [Send OTP](/linkedin-api/auth-send-otp) again to receive a new code. ## Full Authentication Flow Here is the complete two-step flow to get your API key programmatically: ```python Python import requests # Step 1: Send OTP requests.post( "https://api.outx.ai/linkedin-agent/auth-send-otp", json={"email": "john@example.com", "full_name": "John Doe"}, ) print("Check your email for the OTP...") # Step 2: Verify OTP (enter the code from your email) otp = input("Enter the 6-digit OTP: ") response = requests.post( "https://api.outx.ai/linkedin-agent/auth-verify-otp", json={"email": "john@example.com", "otp": otp}, ) api_key = response.json()["team"]["api_key"] print(f"Your API key: {api_key}") ``` ## Next Steps Make your first LinkedIn API request with your new API key Required for API calls to work -- install and keep active --- # Create Keyword Watchlist Source: https://outx.ai/docs/api-reference/watchlist/keyword/create Track LinkedIn posts containing specific keywords with powerful filtering options. Monitor industry trends, job postings, or any topic of interest with customizable fetch frequencies. ## Request Body Watchlist name. If not provided, a name will be auto-generated based on keywords. Array of keywords to track. Can be simple strings or advanced keyword objects with filtering rules. **Simple format:** ```json ["hiring", "blockchain", "remote work"] ``` **Advanced format with filters:** ```json [ { "keyword": "software engineer", "required_keywords": ["remote", "senior"], "exclude_keywords": ["unpaid", "intern"] } ] ``` Optional description for the watchlist Custom labels for organization ```json [ { "name": "hiring", "description": "Job postings" } ] ``` Fetch frequency in hours. Allowed values: `1, 3, 6, 12, 24, 48, 72` ## Advanced Keyword Filtering Each keyword can have additional filtering rules: The primary keyword to search for All of these keywords must be present in the post (AND logic) None of these keywords should be present in the post (NOT logic) ```bash cURL curl -X POST \ "https://api.outx.ai/api-keyword-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "Remote Senior Jobs", "keywords": [ { "keyword": "hiring", "required_keywords": ["remote", "senior", "engineer"], "exclude_keywords": ["unpaid", "intern"] }, { "keyword": "job opening", "required_keywords": ["work from home"], "exclude_keywords": ["junior"] } ], "description": "Track remote senior engineering positions", "labels": [ { "name": "hiring", "description": "Job postings" } ], "fetchFreqInHours": 6 }' ``` ```javascript JavaScript const response = await fetch("https://api.outx.ai/api-keyword-watchlist", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ name: "Remote Senior Jobs", keywords: [ { keyword: "hiring", required_keywords: ["remote", "senior", "engineer"], exclude_keywords: ["unpaid", "intern"], }, ], fetchFreqInHours: 6, }), }); const data = await response.json(); ``` ```python Python import requests url = 'https://api.outx.ai/api-keyword-watchlist' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'name': 'Remote Senior Jobs', 'keywords': [ { 'keyword': 'hiring', 'required_keywords': ['remote', 'senior', 'engineer'], 'exclude_keywords': ['unpaid', 'intern'] } ], 'fetchFreqInHours': 6 } response = requests.post(url, headers=headers, json=payload) ``` ```json Response { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Remote Senior Jobs", "slug": "remote-senior-jobs-550e8400", "type": "keyword", "keywords": ["hiring", "job opening"], "fetchFreqInHours": 6, "created": true, "results": [ { "success": true, "keyword": "hiring", "keyword_id": "660e8400-e29b-41d4-a716-446655440001" } ] } ``` ## Response Fields Unique identifier for the watchlist Watchlist name URL-friendly slug for the watchlist Always "keyword" for keyword watchlists Array of tracked keywords Fetch frequency in hours Whether the watchlist was successfully created Array of keyword creation results ## Error Responses | Status Code | Error Message | Description | | ----------- | ------------------------------------ | ------------------------------------------------------- | | 400 | Missing required parameter: keywords | Keywords array is required | | 400 | Invalid fetchFreqInHours value | Fetch frequency must be one of: 1, 3, 6, 12, 24, 48, 72 | | 401 | Unauthorized | Invalid or missing API key | ## Use Cases Monitor hiring posts for specific roles and locations: ```json { "name": "Remote Engineering Jobs", "keywords": [ { "keyword": "hiring", "required_keywords": ["engineer", "remote"], "exclude_keywords": ["intern", "junior"] } ] } ``` Track discussions about emerging technologies: ```json { "name": "AI Trends", "keywords": ["GPT-4", "Claude", "LLM", "artificial intelligence"], "fetchFreqInHours": 3 } ``` Watch for mentions of competitors: ```json { "name": "Competitor Mentions", "keywords": [ { "keyword": "CompetitorName", "exclude_keywords": ["partnership", "collaboration"] } ] } ``` ## Frequently Asked Questions The number of keywords per watchlist depends on your subscription plan. Free plans have lower limits, while Pro and Enterprise plans allow more keywords. If you hit your plan's keyword limit, the API will return an error. Contact [support@outx.ai](mailto:support@outx.ai) for details on plan-specific limits. Tracking begins immediately after creation. OutX will start scanning LinkedIn for matching posts on the next fetch cycle, based on the `fetchFreqInHours` value you set. If you set `fetchFreqInHours` to 1, you can expect the first results within an hour. When you reach the maximum number of watchlists allowed by your plan, the API will return an error when you try to create a new one. You can either delete an existing watchlist to free up a slot, or upgrade your plan for higher limits. --- # Get Keyword Watchlists Source: https://outx.ai/docs/api-reference/watchlist/keyword/get Retrieve your keyword watchlists with detailed information about tracked keywords and filtering rules. ## Query Parameters Watchlist ID. If omitted, returns all watchlists for your team. ```bash Get All Watchlists curl -X GET \ "https://api.outx.ai/api-keyword-watchlist" \ -H "x-api-key: YOUR_API_KEY" ``` ```bash Get Specific Watchlist curl -X GET \ "https://api.outx.ai/api-keyword-watchlist?id=550e8400-e29b-41d4-a716-446655440000" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript // Get all watchlists const response = await fetch("https://api.outx.ai/api-keyword-watchlist", { headers: { "x-api-key": "YOUR_API_KEY" }, }); // Get specific watchlist const watchlistId = "550e8400-e29b-41d4-a716-446655440000"; const specificResponse = await fetch( `https://api.outx.ai/api-keyword-watchlist?id=${watchlistId}`, { headers: { "x-api-key": "YOUR_API_KEY" }, } ); ``` ```python Python import requests headers = {'x-api-key': 'YOUR_API_KEY'} # Get all watchlists response = requests.get( 'https://api.outx.ai/api-keyword-watchlist', headers=headers ) # Get specific watchlist watchlist_id = '550e8400-e29b-41d4-a716-446655440000' specific_response = requests.get( f'https://api.outx.ai/api-keyword-watchlist?id={watchlist_id}', headers=headers ) ``` ```json All Watchlists { "watchlists": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Remote Senior Jobs", "slug": "remote-senior-jobs-550e8400", "type": "keyword", "fetchFreqInHours": 6, "keywords": ["hiring", "job opening"], "createdAt": "2024-01-15T10:30:00Z" } ], "count": 1 } ``` ```json Single Watchlist { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Remote Senior Jobs", "slug": "remote-senior-jobs-550e8400", "type": "keyword", "keywords": ["hiring", "job opening"], "fetchFreqInHours": 6, "keyword_tracking": [ { "id": "660e8400-e29b-41d4-a716-446655440001", "primary_keyword": "hiring", "required_keywords": ["remote", "senior", "engineer"], "exclude_keywords": ["unpaid", "intern"] } ] } ``` ## Response Fields (All Watchlists) Array of watchlist objects Total number of watchlists ## Response Fields (Single Watchlist) Unique identifier for the watchlist Watchlist name URL-friendly slug for the watchlist Always "keyword" for keyword watchlists Array of tracked keywords Fetch frequency in hours Detailed tracking configuration for each keyword ## Error Responses | Status Code | Error Message | Description | | ----------- | ------------------- | -------------------------------------------- | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to access watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions To get all keyword watchlists, call `GET /api-keyword-watchlist` without any parameters. To get a specific watchlist, pass the watchlist ID as a query parameter: `GET /api-keyword-watchlist?id=YOUR_WATCHLIST_ID`. The single-watchlist response includes more detail, such as the `keyword_tracking` array with full filtering rules. When fetching all watchlists, you get a summary for each one including `id`, `name`, `slug`, `type`, `fetchFreqInHours`, `keywords`, and `createdAt`. When fetching a single watchlist by ID, you also get the `keyword_tracking` array, which contains detailed filtering configuration for each keyword including `required_keywords` and `exclude_keywords`. --- # Update Keyword Watchlist Source: https://outx.ai/docs/api-reference/watchlist/keyword/update Modify your keyword watchlist settings including name, fetch frequency, and active status. ## Request Body Watchlist ID to update New watchlist name New fetch frequency. Allowed values: `1, 3, 6, 12, 24, 48, 72` Set to `true` to disable the watchlist, `false` to enable it ```bash cURL curl -X PUT \ "https://api.outx.ai/api-keyword-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Updated Watchlist Name", "fetchFreqInHours": 24, "disable": false }' ``` ```javascript JavaScript const response = await fetch("https://api.outx.ai/api-keyword-watchlist", { method: "PUT", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ id: "550e8400-e29b-41d4-a716-446655440000", name: "Updated Watchlist Name", fetchFreqInHours: 24, }), }); ``` ```python Python import requests url = 'https://api.outx.ai/api-keyword-watchlist' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'id': '550e8400-e29b-41d4-a716-446655440000', 'name': 'Updated Watchlist Name', 'fetchFreqInHours': 24, 'disable': False } response = requests.put(url, headers=headers, json=payload) ``` ```json Response { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Updated Watchlist Name", "fetchFreqInHours": 24, "disable": false, "updated": true, "message": "Watchlist updated successfully" } ``` ## Response Fields Watchlist ID that was updated Updated watchlist name Updated fetch frequency Current active/disabled status Whether the update was successful Success message ## Error Responses | Status Code | Error Message | Description | | ----------- | ------------------------------ | ------------------------------------------------------- | | 400 | Missing required parameter: id | Watchlist ID is required | | 400 | Invalid fetchFreqInHours value | Fetch frequency must be one of: 1, 3, 6, 12, 24, 48, 72 | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to update watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions You can update the watchlist `name`, the `fetchFreqInHours` (fetch frequency), and the `disable` status (to pause or resume tracking). To modify the actual keywords being tracked, you need to use the keyword-level endpoints to add or remove individual keywords. No. Updating a watchlist's name, fetch frequency, or disable status does not affect any posts or data that have already been collected. Your existing data remains intact. If you change the fetch frequency, the new interval takes effect from the next scheduled fetch cycle. --- # Delete Keyword Watchlist Source: https://outx.ai/docs/api-reference/watchlist/keyword/delete Permanently delete a keyword watchlist and all associated posts and data. Deleting a watchlist is permanent and cannot be undone. All associated posts and data will be removed. ## Query Parameters Watchlist ID to delete ```bash cURL curl -X DELETE \ "https://api.outx.ai/api-keyword-watchlist?id=550e8400-e29b-41d4-a716-446655440000" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript const watchlistId = "550e8400-e29b-41d4-a716-446655440000"; const response = await fetch( `https://api.outx.ai/api-keyword-watchlist?id=${watchlistId}`, { method: "DELETE", headers: { "x-api-key": "YOUR_API_KEY" }, } ); ``` ```python Python import requests watchlist_id = '550e8400-e29b-41d4-a716-446655440000' url = f'https://api.outx.ai/api-keyword-watchlist?id={watchlist_id}' headers = {'x-api-key': 'YOUR_API_KEY'} response = requests.delete(url, headers=headers) ``` ```json Response { "id": "550e8400-e29b-41d4-a716-446655440000", "deleted": true, "message": "Watchlist and all related data deleted successfully" } ``` ## Response Fields ID of the deleted watchlist Whether the deletion was successful Success message ## Error Responses | Status Code | Error Message | Description | | ----------- | ------------------------------ | -------------------------------------------- | | 400 | Missing required parameter: id | Watchlist ID is required | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to delete watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions No. Deletion is permanent and cannot be undone. Once you delete a keyword watchlist, the watchlist configuration and all associated data are removed. If you want to temporarily stop tracking, consider using the update endpoint to set `disable: true` instead. All posts associated with the deleted watchlist are permanently removed. If you need to preserve historical data, export or save the posts via the Posts API before deleting the watchlist. --- # Create People Watchlist Source: https://outx.ai/docs/api-reference/watchlist/people/create Monitor LinkedIn profiles to track their posts, activity, job changes and birthdays. Perfect for following industry influencers, potential clients, or key stakeholders. ## Request Body Watchlist name. If not provided, a name will be auto-generated. Array of LinkedIn profile identifiers. The API automatically detects and extracts identifiers from various formats (LinkedIn URLs, profile slugs, LinkedIn URNs, or direct URN IDs). Optional description for the watchlist Use an existing list ID instead of creating a new one ## Supported Profile Formats ```json [ "https://linkedin.com/in/satyanadella", "https://www.linkedin.com/in/sundarpichai/", "linkedin.com/in/elon-musk" ] ``` ```json ["bill-gates", "jeff-bezos", "mark-zuckerberg"] ``` Full URN format (automatically extracts the unique ID): ```json [ "urn:li:fs_profileView:ACoAAAfA0wwBG02GBN605w5Zc0MWaDG1CEqM9jE", "urn:li:fsd_profile:ACoAAABCDEFGH12345678", "urn:li:member:12345678" ] ``` ```json [ "ACoAAAfA0wwBG02GBN605w5Zc0MWaDG1CEqM9jE", "ACoAAABCDEFGH12345678" ] ``` ```bash cURL curl -X POST \ "https://api.outx.ai/api-people-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "Tech Leaders", "profiles": [ "https://linkedin.com/in/satyanadella", "https://linkedin.com/in/sundarpichai", "elon-musk", "urn:li:fs_profileView:ACoAAAfA0wwBG02GBN605w5Zc0MWaDG1CEqM9jE", "ACoAAABCDEFGH12345678" ], "description": "Track activity of top tech leaders" }' ``` ```javascript JavaScript const response = await fetch("https://api.outx.ai/api-people-watchlist", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ name: "Tech Leaders", profiles: [ "https://linkedin.com/in/satyanadella", "https://linkedin.com/in/sundarpichai", "elon-musk", ], description: "Track activity of top tech leaders", }), }); const data = await response.json(); ``` ```python Python import requests url = 'https://api.outx.ai/api-people-watchlist' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'name': 'Tech Leaders', 'profiles': [ 'https://linkedin.com/in/satyanadella', 'https://linkedin.com/in/sundarpichai', 'elon-musk' ], 'description': 'Track activity of top tech leaders' } response = requests.post(url, headers=headers, json=payload) ``` ```json Response { "id": "770e8400-e29b-41d4-a716-446655440000", "name": "Tech Leaders", "slug": "tech-leaders-770e8400", "type": "people", "profiles_count": 5, "created": true, "tasks_created": 10 } ``` ## Response Fields Unique identifier for the watchlist Watchlist name URL-friendly slug for the watchlist Always "people" for people watchlists Number of profiles added to the watchlist Whether the watchlist was successfully created Number of tracking tasks created ## Use Cases Monitor thought leaders in your industry: ```json { "name": "AI Thought Leaders", "profiles": [ "https://linkedin.com/in/andrewng", "https://linkedin.com/in/ylecun", "geoffrey-hinton" ] } ``` Keep tabs on decision-makers at target companies: ```json { "name": "Enterprise Prospects", "profiles": [ "cto-company-a", "vp-engineering-company-b" ] } ``` Watch what competitor executives are posting: ```json { "name": "Competitor Executives", "profiles": [ "competitor-ceo", "competitor-cto" ] } ``` ## Frequently Asked Questions The number of profiles per watchlist depends on your subscription plan. If you try to add more profiles than your plan allows, the API will return an error. Contact [support@outx.ai](mailto:support@outx.ai) for details on plan-specific limits. Tracking tasks are created immediately when you create the watchlist. The system begins fetching posts from the tracked profiles right away, and results typically start appearing within a short time depending on Chrome extension activity. The `tasks_created` field in the response confirms how many tracking tasks were queued. When you reach your plan's profile tracking limit, the API will return an error when you try to add more profiles. You can remove profiles from existing watchlists or delete unused watchlists to free up capacity, or upgrade your plan for higher limits. --- # Get People Watchlists Source: https://outx.ai/docs/api-reference/watchlist/people/get Retrieve your people watchlists with detailed information about tracked profiles. ## Query Parameters Watchlist ID. If omitted, returns all people watchlists for your team. ```bash Get All Watchlists curl -X GET \ "https://api.outx.ai/api-people-watchlist" \ -H "x-api-key: YOUR_API_KEY" ``` ```bash Get Specific Watchlist curl -X GET \ "https://api.outx.ai/api-people-watchlist?id=770e8400-e29b-41d4-a716-446655440000" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript // Get all watchlists const response = await fetch("https://api.outx.ai/api-people-watchlist", { headers: { "x-api-key": "YOUR_API_KEY" }, }); // Get specific watchlist const watchlistId = "770e8400-e29b-41d4-a716-446655440000"; const specificResponse = await fetch( `https://api.outx.ai/api-people-watchlist?id=${watchlistId}`, { headers: { "x-api-key": "YOUR_API_KEY" }, } ); ``` ```python Python import requests headers = {'x-api-key': 'YOUR_API_KEY'} # Get all watchlists response = requests.get( 'https://api.outx.ai/api-people-watchlist', headers=headers ) # Get specific watchlist watchlist_id = '770e8400-e29b-41d4-a716-446655440000' specific_response = requests.get( f'https://api.outx.ai/api-people-watchlist?id={watchlist_id}', headers=headers ) ``` ```json All Watchlists { "watchlists": [ { "id": "770e8400-e29b-41d4-a716-446655440000", "name": "Tech Leaders", "slug": "tech-leaders-770e8400", "type": "people", "createdAt": "2024-01-15T10:30:00Z" } ], "count": 1 } ``` ```json Single Watchlist { "id": "770e8400-e29b-41d4-a716-446655440000", "name": "Tech Leaders", "slug": "tech-leaders-770e8400", "type": "people", "profiles_count": 5, "lists": [ { "id": "list-uuid", "name": "List Name" } ], "createdAt": "2024-01-15T10:30:00Z" } ``` ## Response Fields Array of watchlist objects (when fetching all) Total number of watchlists (when fetching all) Unique identifier for the watchlist Watchlist name URL-friendly slug Always "people" for people watchlists Number of tracked profiles ## Error Responses | Status Code | Error Message | Description | | ----------- | ------------------- | -------------------------------------------- | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to access watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions To get all people watchlists, call `GET /api-people-watchlist` without any parameters. To get a specific watchlist, pass the watchlist ID as a query parameter: `GET /api-people-watchlist?id=YOUR_WATCHLIST_ID`. The single-watchlist response includes additional details like `profiles_count` and associated `lists`. When fetching all watchlists, you get a summary array with `id`, `name`, `slug`, `type`, and `createdAt` for each watchlist, plus a total `count`. When fetching a single watchlist by ID, you also get `profiles_count` (number of tracked profiles) and the `lists` array with associated list details. --- # Update People Watchlist Source: https://outx.ai/docs/api-reference/watchlist/people/update Modify your people watchlist settings including name and active status. ## Request Body Watchlist ID to update New watchlist name Set to `true` to disable the watchlist, `false` to enable it ```bash cURL curl -X PUT \ "https://api.outx.ai/api-people-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "id": "770e8400-e29b-41d4-a716-446655440000", "name": "Updated Tech Leaders", "disable": false }' ``` ```javascript JavaScript const response = await fetch("https://api.outx.ai/api-people-watchlist", { method: "PUT", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ id: "770e8400-e29b-41d4-a716-446655440000", name: "Updated Tech Leaders", disable: false, }), }); ``` ```python Python import requests url = 'https://api.outx.ai/api-people-watchlist' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'id': '770e8400-e29b-41d4-a716-446655440000', 'name': 'Updated Tech Leaders', 'disable': False } response = requests.put(url, headers=headers, json=payload) ``` ```json Response { "id": "770e8400-e29b-41d4-a716-446655440000", "name": "Updated Tech Leaders", "disable": false, "updated": true, "message": "Watchlist updated successfully" } ``` ## Response Fields Watchlist ID that was updated Updated watchlist name Current active/disabled status Whether the update was successful Success message ## Error Responses | Status Code | Error Message | Description | | ----------- | ------------------------------ | -------------------------------------------- | | 400 | Missing required parameter: id | Watchlist ID is required | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to update watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions You can update the watchlist `name` and the `disable` status (to pause or resume tracking). To modify the profiles being tracked, you would need to create a new watchlist with the updated list of profiles. No. Updating a watchlist's name or disable status does not affect any posts or data that have already been collected. Your existing data remains intact. Disabling a watchlist pauses future tracking, but all previously collected posts are still accessible via the Posts API. --- # Delete People Watchlist Source: https://outx.ai/docs/api-reference/watchlist/people/delete Permanently delete a people watchlist and all associated data. Deleting a watchlist is permanent and cannot be undone. All associated data will be removed. ## Query Parameters Watchlist ID to delete ```bash cURL curl -X DELETE \ "https://api.outx.ai/api-people-watchlist?id=770e8400-e29b-41d4-a716-446655440000" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript const watchlistId = '770e8400-e29b-41d4-a716-446655440000'; const response = await fetch( `https://api.outx.ai/api-people-watchlist?id=${watchlistId}`, { method: 'DELETE', headers: { 'x-api-key': 'YOUR_API_KEY' } } ); ``` ```python Python import requests watchlist_id = '770e8400-e29b-41d4-a716-446655440000' url = f'https://api.outx.ai/api-people-watchlist?id={watchlist_id}' headers = {'x-api-key': 'YOUR_API_KEY'} response = requests.delete(url, headers=headers) ``` ```json Response { "id": "770e8400-e29b-41d4-a716-446655440000", "deleted": true, "message": "Watchlist and all related data deleted successfully" } ``` ## Response Fields ID of the deleted watchlist Whether the deletion was successful Success message ## Error Responses | Status Code | Error Message | Description | |------------|---------------|-------------| | 400 | Missing required parameter: id | Watchlist ID is required | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to delete watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions No. Deletion is permanent and cannot be undone. Once you delete a people watchlist, the watchlist configuration and all associated data are removed. If you want to temporarily stop tracking, consider using the update endpoint to set `disable: true` instead. All posts associated with the deleted watchlist are permanently removed. If you need to preserve historical data, export or save the posts via the Posts API before deleting the watchlist. --- # Create Company Watchlist Source: https://outx.ai/docs/api-reference/watchlist/company/create Monitor LinkedIn company pages to track their posts, announcements and activities. Perfect for competitor analysis, partnership monitoring, or industry research. ## Request Body Watchlist name. If not provided, a name will be auto-generated. Array of LinkedIn company identifiers. The API automatically detects and extracts identifiers from various formats (LinkedIn URLs, company slugs, LinkedIn URNs, or direct URN IDs). Optional description for the watchlist Use an existing list ID instead of creating a new one ## Supported Company Formats ```json [ "https://linkedin.com/company/google", "https://www.linkedin.com/company/microsoft/", "linkedin.com/company/apple" ] ``` ```json [ "netflix", "amazon", "meta" ] ``` Full URN format (automatically extracts the unique ID): ```json [ "urn:li:fs_company:1234567", "urn:li:fsd_company:7654321", "urn:li:organization:9999999" ] ``` Numeric company IDs: ```json [ "1234567", "7654321" ] ``` ```bash cURL curl -X POST \ "https://api.outx.ai/api-company-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "name": "FAANG Companies", "companies": [ "https://linkedin.com/company/meta", "https://linkedin.com/company/apple", "amazon", "netflix", "https://linkedin.com/company/google" ], "description": "Track major tech companies" }' ``` ```javascript JavaScript const response = await fetch( 'https://api.outx.ai/api-company-watchlist', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ name: 'FAANG Companies', companies: [ 'https://linkedin.com/company/meta', 'https://linkedin.com/company/apple', 'amazon', 'netflix', 'https://linkedin.com/company/google' ], description: 'Track major tech companies' }) } ); const data = await response.json(); ``` ```python Python import requests url = 'https://api.outx.ai/api-company-watchlist' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'name': 'FAANG Companies', 'companies': [ 'https://linkedin.com/company/meta', 'https://linkedin.com/company/apple', 'amazon', 'netflix', 'https://linkedin.com/company/google' ], 'description': 'Track major tech companies' } response = requests.post(url, headers=headers, json=payload) ``` ```json Response { "id": "880e8400-e29b-41d4-a716-446655440000", "name": "FAANG Companies", "slug": "faang-companies-880e8400", "type": "company", "companies_count": 5, "created": true, "tasks_created": 5 } ``` ## Response Fields Unique identifier for the watchlist Watchlist name URL-friendly slug for the watchlist Always "company" for company watchlists Number of companies added to the watchlist Whether the watchlist was successfully created Number of tracking tasks created ## Use Cases Monitor competitor company pages for announcements and updates: ```json { "name": "Direct Competitors", "companies": [ "competitor-a", "competitor-b", "competitor-c" ] } ``` Track potential or existing partners: ```json { "name": "Strategic Partners", "companies": [ "partner-company-1", "partner-company-2" ] } ``` Follow companies in your industry vertical: ```json { "name": "SaaS Companies", "companies": [ "salesforce", "hubspot", "zendesk" ] } ``` ## Frequently Asked Questions The number of companies per watchlist depends on your subscription plan. If you try to add more companies than your plan allows, the API will return an error. Contact [support@outx.ai](mailto:support@outx.ai) for details on plan-specific limits. Tracking tasks are created immediately when you create the watchlist. The system begins fetching posts from the tracked company pages right away, and results typically start appearing within a short time depending on Chrome extension activity. The `tasks_created` field in the response confirms how many tracking tasks were queued. When you reach your plan's company tracking limit, the API will return an error when you try to add more companies. You can remove companies from existing watchlists or delete unused watchlists to free up capacity, or upgrade your plan for higher limits. --- # Get Company Watchlists Source: https://outx.ai/docs/api-reference/watchlist/company/get Retrieve your company watchlists with detailed information about tracked companies. ## Query Parameters Watchlist ID. If omitted, returns all company watchlists for your team. ```bash Get All Watchlists curl -X GET \ "https://api.outx.ai/api-company-watchlist" \ -H "x-api-key: YOUR_API_KEY" ``` ```bash Get Specific Watchlist curl -X GET \ "https://api.outx.ai/api-company-watchlist?id=880e8400-e29b-41d4-a716-446655440000" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript // Get all watchlists const response = await fetch( 'https://api.outx.ai/api-company-watchlist', { headers: { 'x-api-key': 'YOUR_API_KEY' } } ); // Get specific watchlist const watchlistId = '880e8400-e29b-41d4-a716-446655440000'; const specificResponse = await fetch( `https://api.outx.ai/api-company-watchlist?id=${watchlistId}`, { headers: { 'x-api-key': 'YOUR_API_KEY' } } ); ``` ```python Python import requests headers = {'x-api-key': 'YOUR_API_KEY'} # Get all watchlists response = requests.get( 'https://api.outx.ai/api-company-watchlist', headers=headers ) # Get specific watchlist watchlist_id = '880e8400-e29b-41d4-a716-446655440000' specific_response = requests.get( f'https://api.outx.ai/api-company-watchlist?id={watchlist_id}', headers=headers ) ``` ```json All Watchlists { "watchlists": [ { "id": "880e8400-e29b-41d4-a716-446655440000", "name": "FAANG Companies", "slug": "faang-companies-880e8400", "type": "company", "createdAt": "2024-01-15T10:30:00Z" } ], "count": 1 } ``` ```json Single Watchlist { "id": "880e8400-e29b-41d4-a716-446655440000", "name": "FAANG Companies", "slug": "faang-companies-880e8400", "type": "company", "companies_count": 5, "lists": [ { "id": "list-uuid", "name": "List Name" } ], "createdAt": "2024-01-15T10:30:00Z" } ``` ## Response Fields Array of watchlist objects (when fetching all) Total number of watchlists (when fetching all) Unique identifier for the watchlist Watchlist name URL-friendly slug Always "company" for company watchlists Number of tracked companies ## Error Responses | Status Code | Error Message | Description | |------------|---------------|-------------| | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to access watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions To get all company watchlists, call `GET /api-company-watchlist` without any parameters. To get a specific watchlist, pass the watchlist ID as a query parameter: `GET /api-company-watchlist?id=YOUR_WATCHLIST_ID`. The single-watchlist response includes additional details like `companies_count` and associated `lists`. When fetching all watchlists, you get a summary array with `id`, `name`, `slug`, `type`, and `createdAt` for each watchlist, plus a total `count`. When fetching a single watchlist by ID, you also get `companies_count` (number of tracked companies) and the `lists` array with associated list details. --- # Update Company Watchlist Source: https://outx.ai/docs/api-reference/watchlist/company/update Modify your company watchlist settings including name and active status. ## Request Body Watchlist ID to update New watchlist name Set to `true` to disable the watchlist, `false` to enable it ```bash cURL curl -X PUT \ "https://api.outx.ai/api-company-watchlist" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "id": "880e8400-e29b-41d4-a716-446655440000", "name": "Updated FAANG Companies", "disable": false }' ``` ```javascript JavaScript const response = await fetch( 'https://api.outx.ai/api-company-watchlist', { method: 'PUT', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ id: '880e8400-e29b-41d4-a716-446655440000', name: 'Updated FAANG Companies', disable: false }) } ); ``` ```python Python import requests url = 'https://api.outx.ai/api-company-watchlist' headers = { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' } payload = { 'id': '880e8400-e29b-41d4-a716-446655440000', 'name': 'Updated FAANG Companies', 'disable': False } response = requests.put(url, headers=headers, json=payload) ``` ```json Response { "id": "880e8400-e29b-41d4-a716-446655440000", "name": "Updated FAANG Companies", "disable": false, "updated": true, "message": "Watchlist updated successfully" } ``` ## Response Fields Watchlist ID that was updated Updated watchlist name Current active/disabled status Whether the update was successful Success message ## Error Responses | Status Code | Error Message | Description | |------------|---------------|-------------| | 400 | Missing required parameter: id | Watchlist ID is required | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to update watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions You can update the watchlist `name` and the `disable` status (to pause or resume tracking). To modify the companies being tracked, you would need to create a new watchlist with the updated list of companies. No. Updating a watchlist's name or disable status does not affect any posts or data that have already been collected. Your existing data remains intact. Disabling a watchlist pauses future tracking, but all previously collected posts are still accessible via the Posts API. --- # Delete Company Watchlist Source: https://outx.ai/docs/api-reference/watchlist/company/delete Permanently delete a company watchlist and all associated data. Deleting a watchlist is permanent and cannot be undone. All associated data will be removed. ## Query Parameters Watchlist ID to delete ```bash cURL curl -X DELETE \ "https://api.outx.ai/api-company-watchlist?id=880e8400-e29b-41d4-a716-446655440000" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript const watchlistId = '880e8400-e29b-41d4-a716-446655440000'; const response = await fetch( `https://api.outx.ai/api-company-watchlist?id=${watchlistId}`, { method: 'DELETE', headers: { 'x-api-key': 'YOUR_API_KEY' } } ); ``` ```python Python import requests watchlist_id = '880e8400-e29b-41d4-a716-446655440000' url = f'https://api.outx.ai/api-company-watchlist?id={watchlist_id}' headers = {'x-api-key': 'YOUR_API_KEY'} response = requests.delete(url, headers=headers) ``` ```json Response { "id": "880e8400-e29b-41d4-a716-446655440000", "deleted": true, "message": "Watchlist and all related data deleted successfully" } ``` ## Response Fields ID of the deleted watchlist Whether the deletion was successful Success message ## Error Responses | Status Code | Error Message | Description | |------------|---------------|-------------| | 400 | Missing required parameter: id | Watchlist ID is required | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to delete watchlist from another team | | 404 | Watchlist not found | Watchlist ID doesn't exist | ## Frequently Asked Questions No. Deletion is permanent and cannot be undone. Once you delete a company watchlist, the watchlist configuration and all associated data are removed. If you want to temporarily stop tracking, consider using the update endpoint to set `disable: true` instead. All posts associated with the deleted watchlist are permanently removed. If you need to preserve historical data, export or save the posts via the Posts API before deleting the watchlist. --- # LinkedIn Post Search & Filter API - Retrieve Posts from Watchlists Source: https://outx.ai/docs/api-reference/engagement/posts/get Retrieve LinkedIn posts from your watchlists with powerful filtering, sorting, and search capabilities. Access posts from keyword, people, and company watchlists with a unified API. ## Query Parameters Watchlist ID(s) to retrieve posts from. Can be a single ID or multiple IDs. If omitted, retrieves posts from all team watchlists. Page number for pagination (20 posts per page) ### Filtering Parameters Filter by label tags. Multiple labels can be specified. Filter by specific people (profile slugs) Filter by specific companies (company slugs) Search within post content Filter for bookmarked/saved posts only Filter by post language (e.g., "en", "es", "fr") Filter posts from this date onwards (ISO 8601 format: YYYY-MM-DD) Filter posts up to this date (ISO 8601 format: YYYY-MM-DD) Filter by post type (e.g., "article", "image", "video", "poll") Filter for trending posts with high engagement Filter for posts you've already liked or commented on Filter by author's seniority level. Supports multiple comma-separated values (e.g., `"VP,Director,CXO"`). Common values: `"Entry"`, `"Manager"`, `"Director"`, `"VP"`, `"CXO"`, `"Founder"`. Retrieve a specific post by its LinkedIn slug ### Sorting Parameters Sort order for posts. Options: - `recent` - Most recent posts first (default) - `popular_first` - Highest engagement (likes + comments) first - `engagement` - Alias for `popular_first` Pagination start offset (0-indexed). Use with `range_to` for custom page sizes. Pagination end offset (inclusive). Default returns 20 posts (0-19). ```bash Get All Posts curl -X GET \ "https://api.outx.ai/api-posts?page=1" \ -H "x-api-key: YOUR_API_KEY" ``` ```bash Get Posts from Specific Watchlist curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=550e8400-e29b-41d4-a716-446655440000&page=1" \ -H "x-api-key: YOUR_API_KEY" ``` ```bash Filter by Date Range and Labels curl -X GET \ "https://api.outx.ai/api-posts?watchlist_id=550e8400&start_date=2024-01-01&end_date=2024-01-31&labels=hiring&labels=remote" \ -H "x-api-key: YOUR_API_KEY" ``` ```bash Search and Sort by Engagement curl -X GET \ "https://api.outx.ai/api-posts?search_term=machine%20learning&sort_by=engagement&trending=true" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript // Get posts from specific watchlist const watchlistId = '550e8400-e29b-41d4-a716-446655440000'; const response = await fetch( `https://api.outx.ai/api-posts?watchlist_id=${watchlistId}&page=1`, { headers: { 'x-api-key': 'YOUR_API_KEY' } } ); const { data, count } = await response.json(); console.log(`Found ${count} posts`); // Advanced filtering const filteredResponse = await fetch( `https://api.outx.ai/api-posts?` + new URLSearchParams({ watchlist_id: watchlistId, search_term: 'AI', sort_by: 'engagement', trending: 'true', start_date: '2024-01-01' }), { headers: { 'x-api-key': 'YOUR_API_KEY' } } ); ``` ```python Python import requests from datetime import datetime, timedelta headers = {'x-api-key': 'YOUR_API_KEY'} base_url = 'https://api.outx.ai/api-posts' # Get posts from specific watchlist params = { 'watchlist_id': '550e8400-e29b-41d4-a716-446655440000', 'page': 1 } response = requests.get(base_url, headers=headers, params=params) result = response.json() print(f"Found {result['count']} posts") # Advanced filtering end_date = datetime.now() start_date = end_date - timedelta(days=30) params = { 'watchlist_id': '550e8400-e29b-41d4-a716-446655440000', 'search_term': 'AI', 'sort_by': 'engagement', 'trending': 'true', 'start_date': start_date.strftime('%Y-%m-%d'), 'end_date': end_date.strftime('%Y-%m-%d') } response = requests.get(base_url, headers=headers, params=params) ``` ```json Response { "data": [ { "id": "post-123", "linkedin_post_url": "https://linkedin.com/feed/update/urn:li:activity:1234567890", "tracking_list_id": "550e8400-e29b-41d4-a716-446655440000", "content": "Excited to announce our new AI-powered feature that helps developers...", "author_name": "Jane Smith", "author_url": "janesmith", "author_headline": "CTO at TechCorp | AI Enthusiast", "author_image_url": "https://media.licdn.com/dms/image/...", "created_at": "2024-01-15T10:35:00Z", "posted_at": "2024-01-15T10:30:00Z", "likes_count": 245, "comments_count": 32, "shares_count": 18, "bookmark": false, "post_type": "image", "language": "en", "tags": ["ai", "product-launch"], "image_urls": ["https://media.licdn.com/dms/image/..."], "videos": null, "seniority_level": "C-Level", "relevance_score": 8, "location_countries": ["United States"], "tagDescriptions": [ { "tag": "ai", "description": "Artificial Intelligence related posts" } ] } ], "count": 156 } ``` ## Response Fields Array of post objects Total number of posts matching the filters ### Post Object Fields Unique post identifier Direct URL to the LinkedIn post ID of the watchlist this post belongs to Post text content Name of the post author LinkedIn profile slug of the author Headline/bio of the post author Profile image URL of the author ISO 8601 timestamp when the post was added to OutX ISO 8601 timestamp when the post was published on LinkedIn Number of likes on the post Number of comments on the post Number of shares/reposts Whether the post has been bookmarked/saved Type of post (e.g., "text", "image", "video", "article", "poll") Detected language of the post Array of tag labels assigned to the post Array of image URLs attached to the post Array of video data attached to the post Seniority level of the post author (e.g., "C-Level", "VP", "Director") Relevance score of the post (1-10). High: 8-10, Medium: 4-7, Low: 1-3 Array of countries associated with the post author's location Array of user/company IDs who have liked this post via OutX Array of user/company IDs who have commented on this post via OutX Array of objects with `tag` and `description` for each tag ## Pagination Posts are returned in batches of 20 by default. Use `range_from` and `range_to` for custom pagination: ```bash # First 20 posts (default) GET /api-posts?watchlist_id=YOUR_ID # Posts 21-40 GET /api-posts?watchlist_id=YOUR_ID&range_from=20&range_to=39 # Posts 41-60 GET /api-posts?watchlist_id=YOUR_ID&range_from=40&range_to=59 ``` The `count` field in the response shows the total number of posts matching your filters, so you know how many pages to fetch. ## Omitting watchlist_id If you omit the `watchlist_id` parameter, the API returns posts from **all watchlists** in your team. This is useful for building a unified feed across all your monitoring. ## Error Responses | Status Code | Error Message | Description | |------------|---------------|-------------| | 400 | Invalid watchlist ID(s) | One or more watchlist IDs don't exist | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Trying to access watchlists from another team | | 500 | Failed to fetch posts | Internal server error | ## Frequently Asked Questions Yes. Simply omit the `watchlist_id` parameter from your request, and the API will return posts from all watchlists in your team. This is useful for building a unified feed across all your keyword, people, and company watchlists. The default page size is 20 posts. You can use the `range_from` and `range_to` parameters for custom pagination. For example, `range_from=0&range_to=49` would return the first 50 posts. The `count` field in the response tells you the total number of matching posts so you know how many pages to fetch. Pass comma-separated values to the `seniority_level` parameter. For example: `seniority_level=VP,Director,CXO`. This returns posts authored by people at any of those seniority levels. Common values include `Entry`, `Manager`, `Director`, `VP`, `CXO`, and `Founder`. --- # Like a Post Source: https://outx.ai/docs/api-reference/engagement/like/create Automate likes on LinkedIn posts through OutX. Engage as an individual user or on behalf of a company page, making it easy to scale engagement and stay visible without manual effort. ## Request Body The unique identifier of the post to like. This is the `id` field from the Posts API response. Email address of the user who will like the post. - For **user** actor type: The user's email - For **company** actor type: The admin user's email who manages the company page Who is performing the like action. Options: - `user` - Like as an individual user - `company` - Like on behalf of a company page **Required when `actor_type` is `company`** The exact company name/title as it appears on LinkedIn. This is used to identify which company page should like the post. ```bash Like as User curl -X POST \ "https://api.outx.ai/api-like" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "post_id": "123e4567-e89b-12d3-a456-426614174000", "user_email": "john.doe@example.com", "actor_type": "user" }' ``` ```bash Like as Company curl -X POST \ "https://api.outx.ai/api-like" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "post_id": "123e4567-e89b-12d3-a456-426614174000", "user_email": "admin@company.com", "actor_type": "company", "company_title": "Acme Corporation" }' ``` ```javascript JavaScript // Like as a user const likeAsUser = async (postId, userEmail) => { const response = await fetch( 'https://api.outx.ai/api-like', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ post_id: postId, user_email: userEmail, actor_type: 'user' }) } ); return await response.json(); }; // Like as a company const likeAsCompany = async (postId, adminEmail, companyTitle) => { const response = await fetch( 'https://api.outx.ai/api-like', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ post_id: postId, user_email: adminEmail, actor_type: 'company', company_title: companyTitle }) } ); return await response.json(); }; // Usage const result = await likeAsUser('post-123', 'john@example.com'); console.log(result.message); ``` ```python Python import requests def like_as_user(post_id, user_email, api_key): """Like a post as a user""" url = 'https://api.outx.ai/api-like' headers = { 'Content-Type': 'application/json', 'x-api-key': api_key } payload = { 'post_id': post_id, 'user_email': user_email, 'actor_type': 'user' } response = requests.post(url, headers=headers, json=payload) return response.json() def like_as_company(post_id, admin_email, company_title, api_key): """Like a post as a company""" url = 'https://api.outx.ai/api-like' headers = { 'Content-Type': 'application/json', 'x-api-key': api_key } payload = { 'post_id': post_id, 'user_email': admin_email, 'actor_type': 'company', 'company_title': company_title } response = requests.post(url, headers=headers, json=payload) return response.json() # Usage result = like_as_user('post-123', 'john@example.com', 'YOUR_API_KEY') print(result['message']) ``` ```json Response { "success": true, "message": "Like task created successfully", "task_id": "456e7890-e12b-34d5-a678-912345678901" } ``` ## Response Fields Whether the like task was created successfully Human-readable message about the operation Unique identifier for the created task. Use this to track the task status. ## How It Works When you call the Like API, a task is created and queued for processing The system validates: - Post exists and belongs to your team's watchlists - User email is valid and associated with your team - Company title matches (if liking as company) - You haven't exceeded plan limits The like is processed asynchronously by OutX's automation system The like is performed on LinkedIn on behalf of the specified user or company ## Actor Types Explained ### User Actor Type When `actor_type` is `user`: - The like appears as coming from the individual user - `user_email` should be the email of the user who will like the post - The user must be part of your OutX team - No `company_title` is needed **Use case:** Personal engagement, building individual presence ### Company Actor Type When `actor_type` is `company`: - The like appears as coming from your company page - `user_email` should be the admin user's email who manages the company page - `company_title` must exactly match the company name on LinkedIn - The admin user must have permission to manage the company page **Use case:** Brand engagement, company visibility, B2B marketing ## Error Responses | Status Code | Error Message | Description | |------------|---------------|-------------| | 400 | Missing required parameter: post_id | `post_id` is required | | 400 | Missing required parameter: user_email | `user_email` is required | | 400 | Invalid actor_type | Must be 'user' or 'company' | | 400 | company_title is required when actor_type is 'company' | Missing company title | | 400 | Post does not support like functionality | Post is missing required data | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Post doesn't belong to your team's watchlists | | 404 | Post not found | Invalid post ID | | 404 | User not found | Invalid user email | | 404 | Company not found | Company title doesn't match any company for the admin user | | 429 | Plan limit reached | You've exceeded your plan's like limit | ## Frequently Asked Questions Likes are processed asynchronously. Once you submit a like request, a task is created and queued. The like typically appears on LinkedIn within a few minutes, depending on when the Chrome extension processes the task. The extension must be active in a team member's browser for the task to be executed. Yes. Set `actor_type` to `"company"` and provide the `company_title` field with the exact company name as it appears on LinkedIn. The `user_email` should be the email of an admin user who has permission to manage that company page. --- # Comment on a Post Source: https://outx.ai/docs/api-reference/engagement/comment/create Programmatically add comments to LinkedIn posts through OutX. Engage as a user or on behalf of a company, automate interactions, and keep conversations active without manual effort. ## Request Body The unique identifier of the post to comment on. This is the `id` field from the Posts API response. Email address of the user who will comment on the post. - For **user** actor type: The user's email - For **company** actor type: The admin user's email who manages the company page The text content of the comment. Cannot be empty or whitespace-only. **Tips for effective comments:** - Be genuine and add value to the conversation - Keep it concise but meaningful - Ask questions to encourage engagement - Avoid generic responses like "Great post!" Who is posting the comment. Options: - `user` - Comment as an individual user - `company` - Comment on behalf of a company page **Required when `actor_type` is `company`** The exact company name/title as it appears on LinkedIn. This is used to identify which company page should post the comment. ```bash Comment as User curl -X POST \ "https://api.outx.ai/api-comment" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "post_id": "123e4567-e89b-12d3-a456-426614174000", "user_email": "john.doe@example.com", "comment_text": "Great insights! Thanks for sharing.", "actor_type": "user" }' ``` ```bash Comment as Company curl -X POST \ "https://api.outx.ai/api-comment" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "post_id": "123e4567-e89b-12d3-a456-426614174000", "user_email": "admin@company.com", "comment_text": "Excellent points from our team perspective! We'\''ve seen similar trends in our industry.", "actor_type": "company", "company_title": "Acme Corporation" }' ``` ```javascript JavaScript // Comment as a user const commentAsUser = async (postId, userEmail, commentText) => { const response = await fetch( 'https://api.outx.ai/api-comment', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ post_id: postId, user_email: userEmail, comment_text: commentText, actor_type: 'user' }) } ); return await response.json(); }; // Comment as a company const commentAsCompany = async (postId, adminEmail, commentText, companyTitle) => { const response = await fetch( 'https://api.outx.ai/api-comment', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-api-key': 'YOUR_API_KEY' }, body: JSON.stringify({ post_id: postId, user_email: adminEmail, comment_text: commentText, actor_type: 'company', company_title: companyTitle }) } ); return await response.json(); }; // Usage const result = await commentAsUser( 'post-123', 'john@example.com', 'This is a valuable perspective on AI trends. Have you considered the impact on smaller businesses?' ); console.log(result.message); ``` ```python Python import requests def comment_as_user(post_id, user_email, comment_text, api_key): """Add a comment to a post as a user""" url = 'https://api.outx.ai/api-comment' headers = { 'Content-Type': 'application/json', 'x-api-key': api_key } payload = { 'post_id': post_id, 'user_email': user_email, 'comment_text': comment_text, 'actor_type': 'user' } response = requests.post(url, headers=headers, json=payload) return response.json() def comment_as_company(post_id, admin_email, comment_text, company_title, api_key): """Add a comment to a post as a company""" url = 'https://api.outx.ai/api-comment' headers = { 'Content-Type': 'application/json', 'x-api-key': api_key } payload = { 'post_id': post_id, 'user_email': admin_email, 'comment_text': comment_text, 'actor_type': 'company', 'company_title': company_title } response = requests.post(url, headers=headers, json=payload) return response.json() # Usage result = comment_as_user( 'post-123', 'john@example.com', 'Great insights! Thanks for sharing.', 'YOUR_API_KEY' ) print(result['message']) ``` ```json Response { "success": true, "message": "Comment task created successfully", "task_id": "789e0123-e45b-67d8-a901-234567890123" } ``` ## Response Fields Whether the comment task was created successfully Human-readable message about the operation Unique identifier for the created task. Use this to track the task status. ## How It Works When you call the Comment API, a task is created and queued for processing The system validates: - Post exists and belongs to your team's watchlists - User email is valid and associated with your team - Comment text is not empty - Company title matches (if commenting as company) - You haven't exceeded plan limits The comment is processed asynchronously by OutX's automation system The comment is posted on LinkedIn on behalf of the specified user or company ## Actor Types Explained ### User Actor Type When `actor_type` is `user`: - The comment appears as coming from the individual user - `user_email` should be the email of the user who will comment - The user must be part of your OutX team - No `company_title` is needed **Use case:** Personal engagement, thought leadership, networking ### Company Actor Type When `actor_type` is `company`: - The comment appears as coming from your company page - `user_email` should be the admin user's email who manages the company page - `company_title` must exactly match the company name on LinkedIn - The admin user must have permission to manage the company page **Use case:** Brand engagement, company thought leadership, B2B marketing ## Error Responses | Status Code | Error Message | Description | |------------|---------------|-------------| | 400 | Missing required parameter: post_id | `post_id` is required | | 400 | Missing required parameter: user_email | `user_email` is required | | 400 | Missing required parameter: comment_text | `comment_text` is required | | 400 | comment_text cannot be empty | Comment text is whitespace-only | | 400 | Invalid actor_type | Must be 'user' or 'company' | | 400 | company_title is required when actor_type is 'company' | Missing company title | | 400 | Post does not support comment functionality | Post is missing required data | | 401 | Unauthorized | Invalid or missing API key | | 403 | Access denied | Post doesn't belong to your team's watchlists | | 404 | Post not found | Invalid post ID | | 404 | User not found | Invalid user email | | 404 | Company not found | Company title doesn't match any company for the admin user | | 429 | Plan limit reached | You've exceeded your plan's comment limit | ## Best Practices - Add value to the conversation - Share relevant experiences or insights - Ask thoughtful questions - Avoid generic responses - Be authentic and genuine - Keep comments concise but substantive - Don't comment on too many posts at once - Spread comments throughout the day - Monitor your plan limits - Implement delays between API calls - Quality over quantity - Reference specific points from the post - Tailor comments to the context - Use the author's name when appropriate - Avoid copy-paste comments - Make each comment unique ## Frequently Asked Questions Yes. Set `actor_type` to `"company"` and provide the `company_title` field with the exact company name as it appears on LinkedIn. The `user_email` should be the email of an admin user who has permission to manage that company page. The OutX API does not impose its own character limit on comments. However, LinkedIn's standard comment length limits apply. LinkedIn currently allows up to approximately 1,250 characters per comment. Keep your comments within this limit to ensure they are posted successfully. --- # LinkedIn Data - Fetch Profiles, Posts, and Automate Engagement Source: https://outx.ai/docs/linkedin-api/introduction The OutX LinkedIn API is a middleware layer that lets you interact with LinkedIn data and automate engagement through a simple REST API. Unlike traditional scraping tools, OutX uses real browser sessions via the OutX Chrome extension, giving you reliable, authentic access to LinkedIn data without the risk of account bans. ## How It Works OutX is not a scraper. Instead of simulating HTTP requests or using headless browsers, it routes API calls through real LinkedIn sessions maintained by the OutX Chrome extension installed on your team members' browsers. This means: - **No proxy rotation or CAPTCHA solving** required - **No risk of IP bans** since requests go through authentic browser sessions - **Real-time data** from LinkedIn, not cached or stale datasets - **Full compliance** with browser-level session handling At least one team member must have the [OutX Chrome extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj) installed and active within the last 48 hours for API calls to work. See [Authentication](/api-reference/authentication) for details. ## Why OutX vs. Alternatives | Feature | OutX | Proxycurl | PhantomBuster | Unipile | |---------|------|-----------|---------------|---------| | Real browser sessions | Yes | No | No | No | | No proxy needed | Yes | No | No | No | | Profile data | Yes | Yes | Yes | Yes | | Post fetching | Yes | Limited | Yes | Yes | | Like/Comment automation | Yes | No | Yes | Limited | | Risk of LinkedIn bans | Minimal | Moderate | High | Moderate | ## Important: LinkedIn Safety **OutX is a proxy — it does not rate-limit your LinkedIn API calls.** Every request you make is executed as a real action on LinkedIn through the Chrome extension. If you send too many requests too quickly, LinkedIn may flag the underlying account for unusual activity. **You are responsible for pacing your requests.** Space calls at least 10–30 seconds apart, distribute them throughout the day, and keep volumes realistic. See [Rate Limits](/api-reference/rate-limits) for detailed safe usage guidelines. ## Async Task Model All LinkedIn API endpoints are **asynchronous**. When you make a request, the API immediately returns a task ID. The actual work is performed in the background by the Chrome extension. You then poll the task status endpoint to retrieve results. ``` 1. POST /linkedin-agent/fetch-profile --> { api_agent_task_id: "abc-123" } 2. GET /linkedin-agent/get-task-status?api_agent_task_id=abc-123 --> { status: "pending" } 3. GET /linkedin-agent/get-task-status?api_agent_task_id=abc-123 --> { status: "completed", task_output: {...} } ``` This async model ensures reliability since the Chrome extension processes tasks on its own schedule, typically within seconds to a few minutes. ## Base URL All LinkedIn API requests should be made to: ``` https://api.outx.ai ``` ## Authentication Include your API key in the `x-api-key` header of every request: ```bash x-api-key: YOUR_API_KEY ``` Get your API key at [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc). ## Available Endpoints Retrieve full profile data for any LinkedIn user by their profile slug Get recent posts from one or more LinkedIn profiles by URN Programmatically like any LinkedIn post via its activity URN Post comments on LinkedIn content via its activity URN Poll for async task results by task ID Company data, search, connection requests, messaging, and more ## Endpoint Categories ### Data Retrieval - **[Fetch Profile](/linkedin-api/fetch-profile)** - `POST /linkedin-agent/fetch-profile` - Get profile data by slug - **[Fetch Posts](/linkedin-api/fetch-profiles-posts)** - `POST /linkedin-agent/fetch-profiles-posts` - Get posts by profile URNs ### Engagement Automation - **[Like Post](/linkedin-api/like-post)** - `POST /linkedin-agent/like-post` - Like a post by activity URN - **[Comment on Post](/linkedin-api/comment-post)** - `POST /linkedin-agent/comment-post` - Comment on a post by activity URN ### Task Management - **[Get Task Status](/linkedin-api/get-task-status)** - `GET /linkedin-agent/get-task-status` - Check task status and retrieve results ## Looking for Watchlist Endpoints? For ongoing monitoring with watchlists, see the [Watchlists & Engagement](/api-reference/quickstart) section. Watchlists automatically scan LinkedIn for keywords, people, and companies over time with AI-powered categorization. **LinkedIn Data** (this section) provides direct access to LinkedIn actions: fetch a profile, get posts, like, comment. Each call is a one-off async task. **Watchlists & Engagement** provides higher-level features: create watchlists that automatically monitor keywords, people, or companies over time, with built-in post retrieval and filtering. Use LinkedIn Data when you need direct control. Use Watchlists when you want ongoing, automated monitoring. Yes. The OutX API works by routing requests through real browser sessions maintained by the Chrome extension. At least one team member must have the extension installed and active within the last 48 hours. See [Authentication](/api-reference/authentication) for details. Yes. OutX provides similar LinkedIn data fetching capabilities to Proxycurl but with key differences: OutX uses real browser sessions instead of scraping, which provides more reliable data access and lower risk of LinkedIn restrictions. OutX also offers engagement automation (likes, comments) which Proxycurl does not. Most tasks complete within seconds to a few minutes, depending on when the Chrome extension picks up the task. The extension checks for new tasks on a regular cron schedule. You can poll the [Get Task Status](/linkedin-api/get-task-status) endpoint to check progress. ## What's Next? Visit [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc) and click "Reveal API Key" Install the OutX Chrome extension and keep it active Fetch your first LinkedIn profile in under 2 minutes with our [Quick Start guide](/linkedin-api/quickstart) Dive into the individual endpoint docs for full details Have questions? Contact us at [support@outx.ai](mailto:support@outx.ai) or visit [outx.ai](https://www.outx.ai). --- ## Learn More - [LinkedIn API Guide - OutX Blog](https://www.outx.ai/blog/linkedin-api-guide) - [Proxycurl Alternative - Why Developers Choose OutX](https://www.outx.ai/blog/proxycurl-alternative) - [LinkedIn Social Listening Platform](https://www.outx.ai/social-listening-linkedin) ## Frequently Asked Questions The LinkedIn API is for direct, on-demand calls - you fetch a profile, retrieve posts, or perform an engagement action as a one-off task. The Social Listening API (Intelligence API) creates watchlists for ongoing monitoring with AI-powered categorization and intent detection. Use the LinkedIn API for programmatic access; use the Social Listening API for continuous tracking. OutX offers similar profile fetching capabilities to Proxycurl. The key difference is that OutX uses real browser sessions via the Chrome extension rather than scraping, which provides more reliable data access and lower risk of LinkedIn restrictions. OutX also supports engagement automation (likes, comments), which Proxycurl does not offer. API calls will return a 403 error with a "Plugin installation required" message. At least one team member must have the OutX Chrome extension installed and active within the last 48 hours for API calls to work. --- # LinkedIn API Quick Start - Fetch Your First Profile in 2 Minutes Source: https://outx.ai/docs/linkedin-api/quickstart This guide walks you through making your first LinkedIn API request end-to-end: from getting your API key to retrieving full profile data. ## Prerequisites Before you begin, make sure you have: 1. An OutX account ([sign up at outx.ai](https://www.outx.ai)) 2. The OutX Chrome extension installed and active 3. Your API key from [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc) The OutX Chrome extension must be installed and active on at least one team member's browser within the last 48 hours. Without this, API calls will return a `403` error. See [Authentication](/api-reference/authentication) for details. ## End-to-End Walkthrough 1. Log in to your OutX account 2. Go to [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc) 3. Click **"Reveal API Key"** 4. Copy your API key Store it in an environment variable for easy use: ```bash export OUTX_API_KEY="your-api-key-here" ``` Install the [OutX Chrome extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj) and log in with your OutX account. The extension will automatically maintain a browser session that the API uses to execute tasks. The extension runs in the background. Just keep Chrome open and it will stay active. Send a `POST` request to create a profile fetch task. You will receive an `api_agent_task_id` that you use to check for results. ```bash cURL curl -X POST \ "https://api.outx.ai/linkedin-agent/fetch-profile" \ -H "Content-Type: application/json" \ -H "x-api-key: $OUTX_API_KEY" \ -d '{"profile_slug": "williamhgates"}' ``` ```javascript JavaScript const response = await fetch( "https://api.outx.ai/linkedin-agent/fetch-profile", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": process.env.OUTX_API_KEY, }, body: JSON.stringify({ profile_slug: "williamhgates" }), } ); const data = await response.json(); console.log(data); // { success: true, api_agent_task_id: "abc-123-def-456", message: "Profile fetch task created successfully" } ``` ```python Python import requests import os url = "https://api.outx.ai/linkedin-agent/fetch-profile" headers = { "Content-Type": "application/json", "x-api-key": os.environ["OUTX_API_KEY"], } payload = {"profile_slug": "williamhgates"} response = requests.post(url, headers=headers, json=payload) data = response.json() print(data) # {"success": True, "api_agent_task_id": "abc-123-def-456", "message": "Profile fetch task created successfully"} ``` **Response:** ```json { "success": true, "api_agent_task_id": "abc-123-def-456", "message": "Profile fetch task created successfully" } ``` The task is now queued. Poll the task status endpoint until the status changes from `pending` to `completed`. ```bash cURL curl -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=abc-123-def-456" \ -H "x-api-key: $OUTX_API_KEY" ``` ```javascript JavaScript async function pollForResult(taskId) { const maxAttempts = 30; const delayMs = 5000; for (let i = 0; i < maxAttempts; i++) { const response = await fetch( `https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=${taskId}`, { headers: { "x-api-key": process.env.OUTX_API_KEY }, } ); const result = await response.json(); if (result.data.status === "completed") { return result.data.task_output; } console.log(`Status: ${result.data.status} - waiting ${delayMs / 1000}s...`); await new Promise((resolve) => setTimeout(resolve, delayMs)); } throw new Error("Task did not complete within the expected time"); } const profileData = await pollForResult("abc-123-def-456"); console.log(profileData); ``` ```python Python import requests import time import os def poll_for_result(task_id, max_attempts=30, delay=5): url = "https://api.outx.ai/linkedin-agent/get-task-status" headers = {"x-api-key": os.environ["OUTX_API_KEY"]} for i in range(max_attempts): response = requests.get( url, headers=headers, params={"api_agent_task_id": task_id}, ) result = response.json() if result["data"]["status"] == "completed": return result["data"]["task_output"] print(f"Status: {result['data']['status']} - waiting {delay}s...") time.sleep(delay) raise TimeoutError("Task did not complete within the expected time") profile_data = poll_for_result("abc-123-def-456") print(profile_data) ``` **Pending response:** ```json { "success": true, "data": { "id": "abc-123-def-456", "status": "pending", "task_input": { "task_type": "agent_profile_fetch", "profile_slug": "williamhgates" }, "task_output": null } } ``` Once the task completes, the response includes the full profile data in `task_output`: ```json { "success": true, "data": { "id": "abc-123-def-456", "status": "completed", "task_input": { "task_type": "agent_profile_fetch", "profile_slug": "williamhgates" }, "task_output": { "name": "Bill Gates", "headline": "Co-chair, Bill & Melinda Gates Foundation", "location": "Seattle, Washington, United States", "profile_url": "https://www.linkedin.com/in/williamhgates", "connections": 500, "followers": 35000000, "about": "Co-chair of the Bill & Melinda Gates Foundation...", "experience": [...], "education": [...], "skills": [...] } } } ``` You now have full LinkedIn profile data accessible via a simple API. ## Complete Working Example Here is a single, copy-paste-ready script that performs the entire flow: ```bash cURL # Step 1: Create the task TASK_ID=$(curl -s -X POST \ "https://api.outx.ai/linkedin-agent/fetch-profile" \ -H "Content-Type: application/json" \ -H "x-api-key: $OUTX_API_KEY" \ -d '{"profile_slug": "williamhgates"}' | jq -r '.api_agent_task_id') echo "Task created: $TASK_ID" # Step 2: Poll until complete while true; do RESULT=$(curl -s -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=$TASK_ID" \ -H "x-api-key: $OUTX_API_KEY") STATUS=$(echo $RESULT | jq -r '.data.status') echo "Status: $STATUS" if [ "$STATUS" = "completed" ]; then echo $RESULT | jq '.data.task_output' break fi sleep 5 done ``` ```javascript JavaScript const API_KEY = process.env.OUTX_API_KEY; const BASE_URL = "https://api.outx.ai"; async function fetchLinkedInProfile(profileSlug) { // Step 1: Create the task const createResponse = await fetch( `${BASE_URL}/linkedin-agent/fetch-profile`, { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": API_KEY, }, body: JSON.stringify({ profile_slug: profileSlug }), } ); const { api_agent_task_id } = await createResponse.json(); console.log(`Task created: ${api_agent_task_id}`); // Step 2: Poll until complete for (let i = 0; i < 30; i++) { const statusResponse = await fetch( `${BASE_URL}/linkedin-agent/get-task-status?api_agent_task_id=${api_agent_task_id}`, { headers: { "x-api-key": API_KEY } } ); const result = await statusResponse.json(); console.log(`Status: ${result.data.status}`); if (result.data.status === "completed") { return result.data.task_output; } await new Promise((r) => setTimeout(r, 5000)); } throw new Error("Timed out waiting for task"); } const profile = await fetchLinkedInProfile("williamhgates"); console.log(JSON.stringify(profile, null, 2)); ``` ```python Python import requests import time import os import json API_KEY = os.environ["OUTX_API_KEY"] BASE_URL = "https://api.outx.ai" def fetch_linkedin_profile(profile_slug): # Step 1: Create the task response = requests.post( f"{BASE_URL}/linkedin-agent/fetch-profile", headers={ "Content-Type": "application/json", "x-api-key": API_KEY, }, json={"profile_slug": profile_slug}, ) task_id = response.json()["api_agent_task_id"] print(f"Task created: {task_id}") # Step 2: Poll until complete for _ in range(30): result = requests.get( f"{BASE_URL}/linkedin-agent/get-task-status", headers={"x-api-key": API_KEY}, params={"api_agent_task_id": task_id}, ).json() status = result["data"]["status"] print(f"Status: {status}") if status == "completed": return result["data"]["task_output"] time.sleep(5) raise TimeoutError("Task did not complete in time") profile = fetch_linkedin_profile("williamhgates") print(json.dumps(profile, indent=2)) ``` ## Next Steps Full endpoint reference for profile fetching Retrieve posts from LinkedIn profiles Automate liking LinkedIn posts Post comments programmatically ## AI Agent Prompt Use the following instructions when building an AI agent that integrates with the OutX LinkedIn Data API. ### Prerequisites - API key stored in `OUTX_API_KEY` environment variable - OutX Chrome extension installed and active on at least one team member's browser ### Quick Reference | Action | Method | Endpoint | Key Params | |--------|--------|----------|------------| | Fetch profile | POST | `/linkedin-agent/fetch-profile` | `profile_slug` (required) | | Fetch posts | POST | `/linkedin-agent/fetch-profiles-posts` | `profile_urns` (required, array) | | Like post | POST | `/linkedin-agent/like-post` | `social_urn` (required) | | Comment on post | POST | `/linkedin-agent/comment-post` | `social_urn` (required), `comment_text` (required) | | Check task status | GET | `/linkedin-agent/get-task-status` | `api_agent_task_id` (required, query param) | ### Async Pattern All LinkedIn Data endpoints return `{api_agent_task_id}` immediately. You must poll `get-task-status` until `status` is `"completed"`, then read `task_output`. ### Guardrails — ALWAYS DO 1. Use `x-api-key` header for authentication 2. Use base URL `https://api.outx.ai` 3. Poll `get-task-status` every 5 seconds after submitting a task 4. Set a timeout (30 attempts / 2.5 minutes) to avoid polling indefinitely 5. Check `status` field: `"pending"` → `"processing"` → `"completed"` or `"failed"` 6. **Space API calls at least 10–30 seconds apart** — OutX is a proxy, not a rate limiter 7. **Distribute calls throughout the day** — don't batch everything in a short window ### Guardrails — NEVER DO 1. Never hardcode API keys in source code 2. Never assume responses are synchronous — always poll for results 3. Never send engagement actions without a valid `social_urn` 4. Never skip error handling for 403 (Chrome extension not active) 5. **Never burst API calls** — sending many requests in rapid succession risks LinkedIn flagging the account For the full OutX API skill file, see [outx-skill.md](https://outx.ai/docs/outx-skill.md). ## Frequently Asked Questions Usually seconds to a few minutes, depending on when the Chrome extension picks up the task. The extension checks for new tasks on a regular schedule. Most tasks complete within 30 seconds under normal conditions. Every 5 seconds is recommended. Set a timeout of 2-3 minutes to avoid polling indefinitely. The example code on this page uses 30 attempts with a 5-second delay, which provides a 2.5-minute window for task completion. --- ## Learn More - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [How to Scrape LinkedIn Data Safely](https://www.outx.ai/blog/scrape-data-linkedin) - [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026) --- # LinkedIn Profile Data API - Fetch Any LinkedIn Profile Source: https://outx.ai/docs/linkedin-api/fetch-profile The Fetch Profile endpoint creates an async task to retrieve full LinkedIn profile data for any public profile. You provide a profile slug (the part after `linkedin.com/in/`) and receive a task ID to poll for results. ## Endpoint ``` POST https://api.outx.ai/linkedin-agent/fetch-profile ``` ## Request Body The LinkedIn profile slug (e.g., `"williamhgates"` from `linkedin.com/in/williamhgates`) The `profile_slug` is the last part of a LinkedIn profile URL. For `https://www.linkedin.com/in/williamhgates`, the slug is `williamhgates`. ## Response The endpoint returns immediately with a task ID. The actual profile data is fetched asynchronously. Whether the task was created successfully UUID to poll for results via [Get Task Status](/linkedin-api/get-task-status) Human-readable confirmation ```json Response { "success": true, "api_agent_task_id": "550e8400-e29b-41d4-a716-446655440000", "message": "Profile fetch task created successfully" } ``` ## Polling for Results After creating the task, poll the [Get Task Status](/linkedin-api/get-task-status) endpoint until the status is `completed`: ``` GET https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=550e8400-e29b-41d4-a716-446655440000 ``` ### Completed Response When the task finishes, `task_output` contains the profile data: ```json { "success": true, "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "completed", "task_input": { "task_type": "agent_profile_fetch", "profile_slug": "williamhgates" }, "task_output": { "profile": { "full_name": "Bill Gates", "headline": "Co-chair, Bill & Melinda Gates Foundation", "location": "Seattle, Washington, United States", "image_url": "https://media.licdn.com/dms/image/...", "email": "", "phone": "", "profile_slug": "williamhgates", "profile_urn": "ACoAAA8BYqEBCGLg_vT_ca6mMEz", "dob": null, "positions": [ { "title": "Co-chair", "company_name": "Bill & Melinda Gates Foundation", "linkedin_company_urn": "1234567", "start_month": 1, "start_year": 2000, "end_month": null, "end_year": null, "is_current": true, "location": "Seattle, WA" } ] } } } } ``` ## Code Examples ```bash cURL # Create the task curl -X POST \ "https://api.outx.ai/linkedin-agent/fetch-profile" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{"profile_slug": "williamhgates"}' # Poll for results curl -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=TASK_ID" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript async function fetchProfile(profileSlug) { // Create the task const response = await fetch( "https://api.outx.ai/linkedin-agent/fetch-profile", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ profile_slug: profileSlug }), } ); const { api_agent_task_id } = await response.json(); // Poll for results while (true) { const statusRes = await fetch( `https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=${api_agent_task_id}`, { headers: { "x-api-key": "YOUR_API_KEY" } } ); const result = await statusRes.json(); if (result.data.status === "completed") { return result.data.task_output; } await new Promise((r) => setTimeout(r, 5000)); } } const profile = await fetchProfile("williamhgates"); console.log(profile); ``` ```python Python import requests import time def fetch_profile(profile_slug): headers = { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", } # Create the task response = requests.post( "https://api.outx.ai/linkedin-agent/fetch-profile", headers=headers, json={"profile_slug": profile_slug}, ) task_id = response.json()["api_agent_task_id"] # Poll for results while True: result = requests.get( "https://api.outx.ai/linkedin-agent/get-task-status", headers={"x-api-key": "YOUR_API_KEY"}, params={"api_agent_task_id": task_id}, ).json() if result["data"]["status"] == "completed": return result["data"]["task_output"] time.sleep(5) profile = fetch_profile("williamhgates") print(profile) ``` ## Error Responses | Status | Error | Description | |--------|-------|-------------| | `400` | `Missing or invalid 'profile_slug'` | The `profile_slug` field is missing or not a string | | `401` | `Missing API Key` / `Invalid API Key` | API key is missing or invalid | | `403` | `Plugin installation required...` | No team member has an active Chrome extension. See [Authentication](/api-reference/authentication) | ## FAQ The profile data typically includes: name, headline, location, profile URL, number of connections and followers, about/summary, work experience, education, and skills. The exact fields depend on what the LinkedIn profile has publicly available. The API fetches profile data that is visible to the LinkedIn account running the Chrome extension. If the team member's LinkedIn account can see a profile, the API can fetch it. Profiles with restricted visibility may return limited data. The `profile_slug` is the last segment of the LinkedIn profile URL. For `https://www.linkedin.com/in/john-doe-123abc`, the slug is `john-doe-123abc`. Do not include the full URL or the `/in/` prefix. Most profile fetch tasks complete within seconds to a few minutes, depending on when the Chrome extension picks up the task. We recommend polling every 5 seconds with a timeout of 2-3 minutes. Yes. OutX is a proxy and does not rate-limit requests on your behalf. Each fetch is executed as a real LinkedIn profile view. Fetching many profiles in rapid succession can trigger LinkedIn's activity monitoring. Space requests at least 10–30 seconds apart and distribute them throughout the day. See [Rate Limits](/api-reference/rate-limits). ## Related - [Get Task Status](/linkedin-api/get-task-status) - Poll for task results - [Fetch Posts](/linkedin-api/fetch-profiles-posts) - Get posts from a profile - [Quick Start](/linkedin-api/quickstart) - End-to-end tutorial - [Intelligence API](/api-reference/introduction) - For ongoing monitoring of LinkedIn profiles --- ## Learn More - [How to Scrape LinkedIn Data Safely](https://www.outx.ai/blog/scrape-data-linkedin) - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) --- # LinkedIn Posts API - Fetch Posts from Any Profile Source: https://outx.ai/docs/linkedin-api/fetch-profiles-posts The Fetch Profiles Posts endpoint creates an async task to retrieve recent posts from one or more LinkedIn profiles. You provide an array of LinkedIn person URNs and receive a task ID to poll for results. ## Endpoint ``` POST https://api.outx.ai/linkedin-agent/fetch-profiles-posts ``` ## Request Body Non-empty array of LinkedIn person URNs (e.g., `["urn:li:person:ABC123"]`) **Don't have a profile URN?** If you only have a LinkedIn profile slug (e.g., `williamhgates` from `linkedin.com/in/williamhgates`), use the [Fetch Profile](/linkedin-api/fetch-profile) endpoint first to retrieve the full profile data, which includes the person URN in the response. ## Response The endpoint returns immediately with a task ID: Whether the task was created successfully UUID to poll for results via [Get Task Status](/linkedin-api/get-task-status) Human-readable confirmation ```json Response { "success": true, "api_agent_task_id": "550e8400-e29b-41d4-a716-446655440000", "message": "Profiles tracking task created successfully" } ``` ## Polling for Results Poll the [Get Task Status](/linkedin-api/get-task-status) endpoint until the status is `completed`: ``` GET https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=550e8400-e29b-41d4-a716-446655440000 ``` ### Completed Response When the task finishes, `task_output` contains the posts data: ```json { "success": true, "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "completed", "task_input": { "task_type": "agent_profiles_tracking", "profile_urns": ["urn:li:person:ABC123"] }, "task_output": { "posts": [ { "linkedin_post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7123456789012345678", "linkedin_post_urn": "7123456789012345678", "social_urn": "urn:li:activity:7123456789012345678", "content": "Excited to share our latest research on...", "post_author": { "author_slug": "johndoe", "author_type": "person", "full_name": "John Doe", "headline": "CEO at Example Corp", "image_url": "https://media.licdn.com/dms/image/..." }, "posted_at": "2025-01-15T10:30:00.000Z", "likes_count": 245, "shares_count": 12, "comments_count": 32, "videos": null, "image_urls": null } ] } } } ``` ## Code Examples ```bash cURL # Create the task curl -X POST \ "https://api.outx.ai/linkedin-agent/fetch-profiles-posts" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{"profile_urns": ["urn:li:person:ABC123"]}' # Poll for results curl -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=TASK_ID" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript async function fetchProfilePosts(profileUrns) { // Create the task const response = await fetch( "https://api.outx.ai/linkedin-agent/fetch-profiles-posts", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ profile_urns: profileUrns }), } ); const { api_agent_task_id } = await response.json(); // Poll for results while (true) { const statusRes = await fetch( `https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=${api_agent_task_id}`, { headers: { "x-api-key": "YOUR_API_KEY" } } ); const result = await statusRes.json(); if (result.data.status === "completed") { return result.data.task_output; } await new Promise((r) => setTimeout(r, 5000)); } } const posts = await fetchProfilePosts(["urn:li:person:ABC123"]); console.log(posts); ``` ```python Python import requests import time def fetch_profile_posts(profile_urns): headers = { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", } # Create the task response = requests.post( "https://api.outx.ai/linkedin-agent/fetch-profiles-posts", headers=headers, json={"profile_urns": profile_urns}, ) task_id = response.json()["api_agent_task_id"] # Poll for results while True: result = requests.get( "https://api.outx.ai/linkedin-agent/get-task-status", headers={"x-api-key": "YOUR_API_KEY"}, params={"api_agent_task_id": task_id}, ).json() if result["data"]["status"] == "completed": return result["data"]["task_output"] time.sleep(5) posts = fetch_profile_posts(["urn:li:person:ABC123"]) print(posts) ``` ## Error Responses | Status | Error | Description | |--------|-------|-------------| | `400` | `Missing or invalid 'profile_urns' (must be a non-empty array)` | The `profile_urns` field is missing, not an array, or empty | | `401` | `Missing API Key` / `Invalid API Key` | API key is missing or invalid | | `403` | `Plugin installation required...` | No team member has an active Chrome extension. See [Authentication](/api-reference/authentication) | ## FAQ LinkedIn person URNs (`urn:li:person:ABC123`) can be found in LinkedIn page source, through the LinkedIn API, or from the output of the [Fetch Profile](/linkedin-api/fetch-profile) endpoint. They are unique identifiers for LinkedIn members. You can pass multiple URNs in a single request. The `profile_urns` array must contain at least one URN. For very large batches, consider splitting into smaller requests to ensure timely processing. The API returns recent posts visible on the profile's activity feed. The exact range depends on LinkedIn's own feed rendering and typically covers the most recent posts available on the profile page. For one-off fetches, use this endpoint. For ongoing monitoring of LinkedIn profiles and their posts, consider the [Intelligence API's People Watchlist](/api-reference/introduction), which automatically tracks profiles and collects new posts on a schedule. ## Related - [Fetch Profile](/linkedin-api/fetch-profile) - Get profile data (and find person URNs) - [Like Post](/linkedin-api/like-post) - Like posts you have fetched - [Comment on Post](/linkedin-api/comment-post) - Comment on posts you have fetched - [Get Task Status](/linkedin-api/get-task-status) - Poll for task results --- ## Learn More - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [How to Scrape LinkedIn Data Safely](https://www.outx.ai/blog/scrape-data-linkedin) - [LinkedIn Monitoring Guide](https://www.outx.ai/blog/linkedin-monitoring-guide-2025) --- # LinkedIn Like API - Like Posts Programmatically Source: https://outx.ai/docs/linkedin-api/like-post The Like Post endpoint creates an async task to like a LinkedIn post. You provide the post's activity URN and the API handles the rest, performing the like action through your team's oldest admin member's LinkedIn account. ## Endpoint ``` POST https://api.outx.ai/linkedin-agent/like-post ``` ## Request Body The LinkedIn activity URN of the post to like (e.g., `"urn:li:activity:7123456789012345678"`) **Don't have a social URN?** Use [Fetch Posts](/linkedin-api/fetch-profiles-posts) to retrieve posts from a profile — each post in the response includes its activity URN. If you only have a profile slug, first use [Fetch Profile](/linkedin-api/fetch-profile) to get the profile URN, then fetch their posts. The like action is performed using your team's **oldest admin member's LinkedIn account**. Make sure this team member is aware that likes will be made from their account via the API. ## Response The endpoint returns immediately with a task ID: Whether the task was created successfully UUID to poll for results via [Get Task Status](/linkedin-api/get-task-status) Human-readable confirmation ```json Response { "success": true, "api_agent_task_id": "550e8400-e29b-41d4-a716-446655440000", "message": "Like post task created successfully" } ``` ## Polling for Results Poll the [Get Task Status](/linkedin-api/get-task-status) endpoint to confirm the like was executed: ``` GET https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=550e8400-e29b-41d4-a716-446655440000 ``` ### Completed Response ```json { "success": true, "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "completed", "task_input": { "task_type": "agent_like_post", "social_urn": "urn:li:activity:7123456789012345678" }, "task_output": { "liked": true } } } ``` ## Code Examples ```bash cURL # Like a post curl -X POST \ "https://api.outx.ai/linkedin-agent/like-post" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{"social_urn": "urn:li:activity:7123456789012345678"}' # Check the result curl -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=TASK_ID" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript async function likePost(socialUrn) { // Create the like task const response = await fetch( "https://api.outx.ai/linkedin-agent/like-post", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ social_urn: socialUrn }), } ); const { api_agent_task_id } = await response.json(); // Poll for completion while (true) { const statusRes = await fetch( `https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=${api_agent_task_id}`, { headers: { "x-api-key": "YOUR_API_KEY" } } ); const result = await statusRes.json(); if (result.data.status === "completed") { return result.data.task_output; } await new Promise((r) => setTimeout(r, 5000)); } } const result = await likePost("urn:li:activity:7123456789012345678"); console.log(result); // { liked: true } ``` ```python Python import requests import time def like_post(social_urn): headers = { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", } # Create the like task response = requests.post( "https://api.outx.ai/linkedin-agent/like-post", headers=headers, json={"social_urn": social_urn}, ) task_id = response.json()["api_agent_task_id"] # Poll for completion while True: result = requests.get( "https://api.outx.ai/linkedin-agent/get-task-status", headers={"x-api-key": "YOUR_API_KEY"}, params={"api_agent_task_id": task_id}, ).json() if result["data"]["status"] == "completed": return result["data"]["task_output"] time.sleep(5) result = like_post("urn:li:activity:7123456789012345678") print(result) # {"liked": True} ``` ## Error Responses | Status | Error | Description | |--------|-------|-------------| | `400` | `Missing or invalid 'social_urn'` | The `social_urn` field is missing or not a string | | `401` | `Missing API Key` / `Invalid API Key` | API key is missing or invalid | | `403` | `Plugin installation required...` | No team member has an active Chrome extension. See [Authentication](/api-reference/authentication) | | `404` | `No admin user found in the team` | Your team has no admin members | ## FAQ The like is performed using your team's **oldest admin member's** LinkedIn account (sorted by when they joined the team). This is the team member whose Chrome extension session executes the action. Activity URNs look like `urn:li:activity:7123456789012345678`. You can find them in LinkedIn post URLs (the number after `/activity/`), or from the output of the [Fetch Posts](/linkedin-api/fetch-profiles-posts) endpoint. **OutX does not rate-limit these requests for you.** OutX is a proxy — every like you trigger is executed immediately on LinkedIn through a real browser session. If you send 50 like requests in rapid succession, all 50 will attempt to execute, and LinkedIn may flag the account for unusual activity. Space out likes by at least 30–60 seconds and distribute them throughout the day. See [Rate Limits](/api-reference/rate-limits) for safe usage guidelines. The API currently supports liking posts only. Unlike functionality is on our [roadmap](/linkedin-api/coming-soon). If you need this feature, contact [support@outx.ai](mailto:support@outx.ai). The LinkedIn API's like endpoint currently performs likes as the admin user's personal account. For company page engagement, see the [Intelligence API](/api-reference/introduction) which supports company actor types. ## Related - [Comment on Post](/linkedin-api/comment-post) - Comment on posts alongside liking them - [Fetch Posts](/linkedin-api/fetch-profiles-posts) - Fetch posts to get activity URNs - [Get Task Status](/linkedin-api/get-task-status) - Poll for task results --- ## Learn More - [How to Automate LinkedIn Likes Safely](https://www.outx.ai/blog/linkedin-auto-liker) - [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026) - [Automate LinkedIn Likes & Comments](https://www.outx.ai/blog/automate-linkedin-likes-comments) --- # LinkedIn Comment API - Comment on Posts via API Source: https://outx.ai/docs/linkedin-api/comment-post The Comment Post endpoint creates an async task to post a comment on a LinkedIn post. You provide the post's activity URN and the comment text, and the API handles posting the comment through your team's oldest admin member's LinkedIn account. ## Endpoint ``` POST https://api.outx.ai/linkedin-agent/comment-post ``` ## Request Body The LinkedIn activity URN of the post (e.g., `"urn:li:activity:7123456789012345678"`) The text content of the comment to post **Don't have a social URN?** Use [Fetch Posts](/linkedin-api/fetch-profiles-posts) to retrieve posts from a profile — each post in the response includes its activity URN. If you only have a profile slug, first use [Fetch Profile](/linkedin-api/fetch-profile) to get the profile URN, then fetch their posts. The comment is posted using your team's **oldest admin member's LinkedIn account**. Make sure this team member is aware that comments will be posted from their account via the API. ## Response The endpoint returns immediately with a task ID: Whether the task was created successfully UUID to poll for results via [Get Task Status](/linkedin-api/get-task-status) Human-readable confirmation ```json Response { "success": true, "api_agent_task_id": "550e8400-e29b-41d4-a716-446655440000", "message": "Comment post task created successfully" } ``` ## Polling for Results Poll the [Get Task Status](/linkedin-api/get-task-status) endpoint to confirm the comment was posted: ``` GET https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=550e8400-e29b-41d4-a716-446655440000 ``` ### Completed Response ```json { "success": true, "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "completed", "task_input": { "task_type": "agent_comment_post", "social_urn": "urn:li:activity:7123456789012345678", "comment_text": "Great insights! Thanks for sharing." }, "task_output": { "commented": true } } } ``` ## Code Examples ```bash cURL # Comment on a post curl -X POST \ "https://api.outx.ai/linkedin-agent/comment-post" \ -H "Content-Type: application/json" \ -H "x-api-key: YOUR_API_KEY" \ -d '{ "social_urn": "urn:li:activity:7123456789012345678", "comment_text": "Great insights! Thanks for sharing." }' # Check the result curl -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=TASK_ID" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript async function commentOnPost(socialUrn, commentText) { // Create the comment task const response = await fetch( "https://api.outx.ai/linkedin-agent/comment-post", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", }, body: JSON.stringify({ social_urn: socialUrn, comment_text: commentText, }), } ); const { api_agent_task_id } = await response.json(); // Poll for completion while (true) { const statusRes = await fetch( `https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=${api_agent_task_id}`, { headers: { "x-api-key": "YOUR_API_KEY" } } ); const result = await statusRes.json(); if (result.data.status === "completed") { return result.data.task_output; } await new Promise((r) => setTimeout(r, 5000)); } } const result = await commentOnPost( "urn:li:activity:7123456789012345678", "Great insights! Thanks for sharing." ); console.log(result); // { commented: true } ``` ```python Python import requests import time def comment_on_post(social_urn, comment_text): headers = { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY", } # Create the comment task response = requests.post( "https://api.outx.ai/linkedin-agent/comment-post", headers=headers, json={ "social_urn": social_urn, "comment_text": comment_text, }, ) task_id = response.json()["api_agent_task_id"] # Poll for completion while True: result = requests.get( "https://api.outx.ai/linkedin-agent/get-task-status", headers={"x-api-key": "YOUR_API_KEY"}, params={"api_agent_task_id": task_id}, ).json() if result["data"]["status"] == "completed": return result["data"]["task_output"] time.sleep(5) result = comment_on_post( "urn:li:activity:7123456789012345678", "Great insights! Thanks for sharing." ) print(result) # {"commented": True} ``` ## Best Practices for Comments Well-crafted comments drive better engagement and reflect positively on your LinkedIn presence. Here are some tips for effective automated commenting. - **Be genuine and specific.** Reference something from the post content rather than posting generic responses like "Great post!" - **Add value.** Share a related insight, ask a thoughtful question, or offer a complementary perspective. - **Keep it concise.** LinkedIn comments that are 1-3 sentences tend to perform best. - **Vary your comments.** If you are commenting on multiple posts, make each comment unique. Repeating the same text can look spammy. - **Space out your comments.** Avoid commenting on dozens of posts in rapid succession. Natural timing patterns are less likely to trigger LinkedIn's activity monitoring. ## Error Responses | Status | Error | Description | |--------|-------|-------------| | `400` | `Missing or invalid 'social_urn'` | The `social_urn` field is missing or not a string | | `400` | `Missing or invalid 'comment_text'` | The `comment_text` field is missing or not a string | | `401` | `Missing API Key` / `Invalid API Key` | API key is missing or invalid | | `403` | `Plugin installation required...` | No team member has an active Chrome extension. See [Authentication](/api-reference/authentication) | | `404` | `No admin user found in the team` | Your team has no admin members | ## FAQ The comment is posted using your team's **oldest admin member's** LinkedIn account (sorted by when they joined the team). This is the team member whose Chrome extension session executes the action. LinkedIn's own comment character limit applies (approximately 1,250 characters). The API does not enforce an additional limit, but your comment will be truncated by LinkedIn if it exceeds their limit. You can include hashtags (e.g., `#AI #MachineLearning`) directly in the `comment_text`. LinkedIn will render them as clickable hashtags. @mentions of specific users are not currently supported through the API. The API currently supports posting comments only. Editing and deleting comments is on our [roadmap](/linkedin-api/coming-soon). You can manually edit or delete comments from the LinkedIn interface. **OutX does not rate-limit these requests for you.** OutX is a proxy — every comment you trigger is executed immediately on LinkedIn through a real browser session. Space comments at least 30–60 seconds apart, distribute them throughout the day, and keep daily volume realistic. Posting many comments in rapid succession can trigger LinkedIn's activity monitoring. See [Rate Limits](/api-reference/rate-limits) for safe usage guidelines. ## Related - [Like Post](/linkedin-api/like-post) - Like posts alongside commenting - [Fetch Posts](/linkedin-api/fetch-profiles-posts) - Fetch posts to get activity URNs - [Get Task Status](/linkedin-api/get-task-status) - Poll for task results --- ## Learn More - [How to Automate LinkedIn Comments](https://www.outx.ai/blog/linkedin-auto-commentor) - [Automate LinkedIn Likes & Comments](https://www.outx.ai/blog/automate-linkedin-likes-comments) - [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026) --- # Check Async Task Status - LinkedIn API Source: https://outx.ai/docs/linkedin-api/get-task-status The Get Task Status endpoint lets you check the status and retrieve the output of any async task created by the LinkedIn API. All LinkedIn API endpoints are asynchronous -- they return a task ID immediately, and you poll this endpoint to get results. ## Endpoint ``` GET https://api.outx.ai/linkedin-agent/get-task-status ``` ## Query Parameters The task ID returned by any LinkedIn API endpoint ``` GET https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=550e8400-e29b-41d4-a716-446655440000 ``` ## Response Whether the request was successful The task ID Current task status: `pending` or `completed` The original input you provided when creating the task The task result. `null` while status is `pending`, populated when `completed` ```json Response { "success": true, "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "status": "completed", "task_input": { "task_type": "agent_profile_fetch", "profile_slug": "williamhgates" }, "task_output": { "name": "Bill Gates", "headline": "Co-chair, Bill & Melinda Gates Foundation" } } } ``` ## Status Values | Status | Description | |--------|-------------| | `pending` | The task has been created and is waiting to be picked up by the Chrome extension | | `completed` | The task has finished and results are available in `task_output` | ## Polling Pattern Since all LinkedIn API tasks are asynchronous, you need to poll this endpoint to get results. Here is the recommended pattern: 1. Call a LinkedIn API endpoint (e.g., `fetch-profile`) to create a task 2. Receive the `api_agent_task_id` in the response 3. Poll `get-task-status` every 5 seconds 4. Stop polling when `status` is `completed` 5. Read the results from `task_output` We recommend polling every 5 seconds with a maximum of 30 attempts (about 2.5 minutes total). Most tasks complete well within this window. ## Code Examples ### Basic Polling ```bash cURL # One-time status check curl -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=550e8400-e29b-41d4-a716-446655440000" \ -H "x-api-key: YOUR_API_KEY" ``` ```javascript JavaScript async function waitForTask(taskId, options = {}) { const { maxAttempts = 30, delayMs = 5000 } = options; for (let attempt = 0; attempt < maxAttempts; attempt++) { const response = await fetch( `https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=${taskId}`, { headers: { "x-api-key": "YOUR_API_KEY" } } ); const result = await response.json(); if (result.data.status === "completed") { return result.data; } console.log( `Attempt ${attempt + 1}/${maxAttempts}: status=${result.data.status}` ); await new Promise((resolve) => setTimeout(resolve, delayMs)); } throw new Error(`Task ${taskId} did not complete after ${maxAttempts} attempts`); } // Usage const task = await waitForTask("550e8400-e29b-41d4-a716-446655440000"); console.log("Task type:", task.task_input.task_type); console.log("Output:", task.task_output); ``` ```python Python import requests import time def wait_for_task(task_id, max_attempts=30, delay=5): """Poll for task completion and return the result.""" headers = {"x-api-key": "YOUR_API_KEY"} for attempt in range(max_attempts): response = requests.get( "https://api.outx.ai/linkedin-agent/get-task-status", headers=headers, params={"api_agent_task_id": task_id}, ) result = response.json() if result["data"]["status"] == "completed": return result["data"] print(f"Attempt {attempt + 1}/{max_attempts}: status={result['data']['status']}") time.sleep(delay) raise TimeoutError(f"Task {task_id} did not complete after {max_attempts} attempts") # Usage task = wait_for_task("550e8400-e29b-41d4-a716-446655440000") print("Task type:", task["task_input"]["task_type"]) print("Output:", task["task_output"]) ``` ### Polling with Bash Loop ```bash TASK_ID="550e8400-e29b-41d4-a716-446655440000" for i in $(seq 1 30); do RESULT=$(curl -s -X GET \ "https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id=$TASK_ID" \ -H "x-api-key: YOUR_API_KEY") STATUS=$(echo $RESULT | jq -r '.data.status') echo "Attempt $i: $STATUS" if [ "$STATUS" = "completed" ]; then echo "Result:" echo $RESULT | jq '.data.task_output' exit 0 fi sleep 5 done echo "Task did not complete in time" exit 1 ``` ## Team Scoping Task status queries are scoped to your team. You can only retrieve the status of tasks that were created with your API key. Attempting to check a task that belongs to a different team will return a `404` error. ## Error Responses | Status | Error | Description | |--------|-------|-------------| | `400` | `Missing or invalid 'api_agent_task_id'` | The `api_agent_task_id` query parameter is missing or not a string | | `401` | `Missing API Key` / `Invalid API Key` | API key is missing or invalid | | `403` | `Plugin installation required...` | No team member has an active Chrome extension. See [Authentication](/api-reference/authentication) | | `404` | `Agent task not found` | The task ID does not exist or belongs to a different team | ## FAQ We recommend polling every 5 seconds. This provides a good balance between responsiveness and avoiding unnecessary requests. Most tasks complete within 10-60 seconds. In rare cases, a task may remain in `pending` status if the Chrome extension is not running or encounters an issue. We recommend setting a timeout of 2-3 minutes. If a task has not completed within that window, check that the Chrome extension is active and try creating a new task. Currently, you can only check one task at a time. If you need to monitor multiple tasks, make separate requests for each task ID. Task records are persisted in the database. You can check the status of completed tasks at any time to re-read the output. The `task_type` field in `task_input` indicates which endpoint created the task: - `agent_profile_fetch` - from [Fetch Profile](/linkedin-api/fetch-profile) - `agent_profiles_tracking` - from [Fetch Posts](/linkedin-api/fetch-profiles-posts) - `agent_like_post` - from [Like Post](/linkedin-api/like-post) - `agent_comment_post` - from [Comment on Post](/linkedin-api/comment-post) ## Related - [Fetch Profile](/linkedin-api/fetch-profile) - Creates profile fetch tasks - [Fetch Posts](/linkedin-api/fetch-profiles-posts) - Creates post fetch tasks - [Like Post](/linkedin-api/like-post) - Creates like tasks - [Comment on Post](/linkedin-api/comment-post) - Creates comment tasks --- ## Learn More - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026) --- # LinkedIn API Roadmap - Upcoming Endpoints Source: https://outx.ai/docs/linkedin-api/coming-soon We are actively expanding the OutX LinkedIn API. Here is what is coming next. ## Planned Endpoints Retrieve full company page data including description, employee count, industry, specialties, and recent updates. Similar to the profile fetch endpoint but for LinkedIn company pages. Search for LinkedIn profiles by keywords, job title, company, location, and other filters. Returns a list of matching profiles with basic info. Send LinkedIn connection requests programmatically with optional personalized notes. Build your network at scale through the API. Send direct messages to your LinkedIn connections via the API. Ideal for outreach automation and follow-up sequences. Retrieve job listings from LinkedIn by company, title, location, or keywords. Access job descriptions, requirements, and posting details. Get recent posts from LinkedIn company pages. Monitor competitor activity, industry trends, and company announcements. ## Request an Endpoint Have a specific LinkedIn API use case that is not covered above? We want to hear from you. Contact us at [support@outx.ai](mailto:support@outx.ai) with: - A description of the endpoint you need - Your use case and expected volume - Any specific data fields you require Enterprise customers can request priority development for custom endpoints. Contact [support@outx.ai](mailto:support@outx.ai) to discuss your needs. ## Available Now While you wait for new endpoints, check out what is already available: Retrieve full profile data for any LinkedIn user Get recent posts from LinkedIn profiles Like LinkedIn posts programmatically Post comments on LinkedIn content via API You can also use the [Intelligence API](/api-reference/introduction) for automated watchlist-based monitoring of keywords, people, and companies on LinkedIn. ## Frequently Asked Questions We are actively building new endpoints including company data, profile search, connection requests, and messaging. Sign up for updates by emailing [support@outx.ai](mailto:support@outx.ai) to be notified when new endpoints launch. Yes. Email [support@outx.ai](mailto:support@outx.ai) with a description of the endpoint you need, your use case, and expected volume. Enterprise customers can request priority development for custom endpoints. --- # MCP Server — Connect AI Agents to OutX Source: https://outx.ai/docs/integrations/mcp The OutX MCP server lets AI agents interact with the full OutX API through the [Model Context Protocol](https://modelcontextprotocol.io). Create watchlists, search posts, fetch profiles, and engage on LinkedIn — all via natural language prompts. ## Install ```bash npx outx-mcp-server ``` Requires Node.js 18+ and an OutX API key. [Get your key](https://mentions.outx.ai/api-doc). ## Setup ### Claude Desktop Add to `~/Library/Application Support/Claude/claude_desktop_config.json`: ```json { "mcpServers": { "outx": { "command": "npx", "args": ["-y", "outx-mcp-server"], "env": { "OUTX_API_KEY": "your-api-key" } } } } ``` ### Cursor Add to `.cursor/mcp.json` in your project: ```json { "mcpServers": { "outx": { "command": "npx", "args": ["-y", "outx-mcp-server"], "env": { "OUTX_API_KEY": "your-api-key" } } } } ``` ### Claude Code Add to `.mcp.json` in your project: ```json { "mcpServers": { "outx": { "command": "npx", "args": ["-y", "outx-mcp-server"], "env": { "OUTX_API_KEY": "your-api-key" } } } } ``` ## Available Tools ### Watchlist Management 20 tools covering the full OutX API: | Tool | Description | |------|-------------| | `create_keyword_watchlist` | Monitor LinkedIn posts matching keywords | | `list_keyword_watchlists` | List all keyword watchlists | | `update_keyword_watchlist` | Update name, frequency, or status | | `delete_keyword_watchlist` | Delete a keyword watchlist | | `create_people_watchlist` | Track posts from specific LinkedIn profiles | | `list_people_watchlists` | List all people watchlists | | `update_people_watchlist` | Update name, frequency, or status | | `delete_people_watchlist` | Delete a people watchlist | | `create_company_watchlist` | Monitor posts from LinkedIn company pages | | `list_company_watchlists` | List all company watchlists | | `update_company_watchlist` | Update name, frequency, or status | | `delete_company_watchlist` | Delete a company watchlist | ### Posts & Engagement | Tool | Description | |------|-------------| | `get_posts` | Search and filter posts with 15+ parameters | | `like_post` | Like a watchlist post | | `comment_on_post` | Comment on a watchlist post | ### LinkedIn Data API These tools wrap the async LinkedIn Data API. The MCP server handles polling automatically — you get the result directly. | Tool | Description | |------|-------------| | `fetch_linkedin_profile` | Fetch a profile by slug (name, headline, experience, education, skills) | | `fetch_linkedin_posts` | Fetch posts from profiles by URN | | `linkedin_like_post` | Like a post by activity URN | | `linkedin_comment_on_post` | Comment on a post by activity URN | | `get_task_status` | Check status of an async task manually | LinkedIn Data tools require the [OutX Chrome extension](/resources/chrome-extension) to be active within the last 48 hours. ## Example Prompts Once connected, try these with your AI agent: **Social listening:** - "Create a watchlist to monitor LinkedIn posts about AI startups raising Series A" - "Show me trending posts from my watchlists this week" - "What are VPs posting about machine learning?" **Profile research:** - "Fetch the LinkedIn profile for williamhgates" - "Get recent posts from this prospect's profile" **Engagement:** - "Like the most engaging post about product management" - "Comment 'Great insights!' on this post" ## How It Works The MCP server connects to the OutX API using your API key. When an AI agent calls a tool: 1. The server translates the tool call into an OutX API request 2. For LinkedIn Data tools, it automatically submits the async task and polls until complete 3. Results are returned as structured JSON the agent can reason about ``` AI Agent ←→ MCP Protocol ←→ OutX MCP Server ←→ OutX API ←→ LinkedIn ``` ## Source Code The MCP server is open source: [github.com/outxai/outx-mcp-server](https://github.com/outxai/outx-mcp-server) --- ## Learn More - [How to Connect AI Agents to LinkedIn](https://www.outx.ai/blog/linkedin-api-for-ai-agents) - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [LangChain Integration](/integrations/langchain) - [Python SDK](/integrations/python-sdk) --- # Python Integration — OutX API Client Source: https://outx.ai/docs/integrations/python-sdk A lightweight Python wrapper for the OutX API. Copy the class below into your project — no package installation needed beyond `requests`. ## Quick Start ```python import os from outx import OutXClient client = OutXClient(api_key=os.environ["OUTX_API_KEY"]) # Fetch a LinkedIn profile profile = client.fetch_profile("williamhgates") print(profile["profile"]["full_name"]) # Bill Gates # Get posts from a watchlist posts = client.get_posts(watchlist_id="your-watchlist-id", sort_by="recent_first") for post in posts["data"]: print(f"{post['author_name']}: {post['content'][:100]}") # Like a post client.like_post(post_id=posts["data"][0]["id"], user_email="you@company.com") ``` ## The Client Class Save this as `outx.py` in your project: ```python """OutX API client — drop-in wrapper for the OutX REST API.""" import time import requests class OutXClient: """Lightweight client for the OutX API. Args: api_key: Your OutX API key. base_url: API base URL (default: https://api.outx.ai). poll_interval: Seconds between task status polls (default: 5). poll_timeout: Max seconds to wait for async tasks (default: 150). """ def __init__( self, api_key: str, base_url: str = "https://api.outx.ai", poll_interval: int = 5, poll_timeout: int = 150, ): self.base_url = base_url self.poll_interval = poll_interval self.poll_timeout = poll_timeout self.session = requests.Session() self.session.headers.update({ "x-api-key": api_key, "Content-Type": "application/json", }) # ── LinkedIn Data API (async) ──────────────────────────── def fetch_profile(self, profile_slug: str) -> dict: """Fetch a LinkedIn profile by slug. Blocks until complete.""" resp = self.session.post( f"{self.base_url}/linkedin-agent/fetch-profile", json={"profile_slug": profile_slug}, ) resp.raise_for_status() return self._wait_for_task(resp.json()["api_agent_task_id"]) def fetch_posts_by_urn(self, profile_urns: list[str]) -> dict: """Fetch posts from LinkedIn profiles by URN. Blocks until complete.""" resp = self.session.post( f"{self.base_url}/linkedin-agent/fetch-profiles-posts", json={"profile_urns": profile_urns}, ) resp.raise_for_status() return self._wait_for_task(resp.json()["api_agent_task_id"]) def like_linkedin_post(self, social_urn: str) -> dict: """Like a LinkedIn post by activity URN. Blocks until complete.""" resp = self.session.post( f"{self.base_url}/linkedin-agent/like-post", json={"social_urn": social_urn}, ) resp.raise_for_status() return self._wait_for_task(resp.json()["api_agent_task_id"]) def comment_linkedin_post(self, social_urn: str, comment_text: str) -> dict: """Comment on a LinkedIn post by activity URN. Blocks until complete.""" resp = self.session.post( f"{self.base_url}/linkedin-agent/comment-post", json={"social_urn": social_urn, "comment_text": comment_text}, ) resp.raise_for_status() return self._wait_for_task(resp.json()["api_agent_task_id"]) def get_task_status(self, task_id: str) -> dict: """Check the status of an async task.""" resp = self.session.get( f"{self.base_url}/linkedin-agent/get-task-status", params={"api_agent_task_id": task_id}, ) resp.raise_for_status() return resp.json() # ── Watchlists & Engagement API (sync) ─────────────────── def create_keyword_watchlist(self, keywords: list, **kwargs) -> dict: """Create a keyword watchlist. Args: keywords: List of keyword strings or objects with keyword/required_keywords/exclude_keywords. **kwargs: name, description, labels, fetchFreqInHours (1,3,6,12,24,48,72). """ resp = self.session.post( f"{self.base_url}/api-keyword-watchlist", json={"keywords": keywords, **kwargs}, ) resp.raise_for_status() return resp.json() def create_people_watchlist(self, profiles: list, **kwargs) -> dict: """Create a people watchlist. Args: profiles: List of LinkedIn profile URLs or slugs. **kwargs: name, description, labels, fetchFreqInHours. """ resp = self.session.post( f"{self.base_url}/api-people-watchlist", json={"profiles": profiles, **kwargs}, ) resp.raise_for_status() return resp.json() def create_company_watchlist(self, companies: list, **kwargs) -> dict: """Create a company watchlist. Args: companies: List of LinkedIn company URLs or slugs. **kwargs: name, description, labels, fetchFreqInHours. """ resp = self.session.post( f"{self.base_url}/api-company-watchlist", json={"companies": companies, **kwargs}, ) resp.raise_for_status() return resp.json() def get_watchlists(self, watchlist_type: str = "keyword") -> dict: """List watchlists. Type: 'keyword', 'people', or 'company'.""" endpoint_map = { "keyword": "api-keyword-watchlist", "people": "api-people-watchlist", "company": "api-company-watchlist", } resp = self.session.get( f"{self.base_url}/{endpoint_map[watchlist_type]}" ) resp.raise_for_status() return resp.json() def get_posts(self, watchlist_id: str = None, **kwargs) -> dict: """Get posts from watchlists. Args: watchlist_id: Filter by watchlist (omit for all). **kwargs: page, sort_by, start_date, end_date, seniority_level, trending, lang, post_type, search_term. """ params = {k: v for k, v in {**kwargs, "watchlist_id": watchlist_id}.items() if v is not None} resp = self.session.get( f"{self.base_url}/api-posts", params=params, ) resp.raise_for_status() return resp.json() def like_post(self, post_id: str, user_email: str, actor_type: str = "user") -> dict: """Like a watchlist post.""" resp = self.session.post( f"{self.base_url}/api-like", json={"post_id": post_id, "user_email": user_email, "actor_type": actor_type}, ) resp.raise_for_status() return resp.json() def comment_post(self, post_id: str, user_email: str, comment_text: str, actor_type: str = "user") -> dict: """Comment on a watchlist post.""" resp = self.session.post( f"{self.base_url}/api-comment", json={ "post_id": post_id, "user_email": user_email, "comment_text": comment_text, "actor_type": actor_type, }, ) resp.raise_for_status() return resp.json() # ── Internal ───────────────────────────────────────────── def _wait_for_task(self, task_id: str) -> dict: """Poll until an async task completes or times out.""" elapsed = 0 while elapsed < self.poll_timeout: result = self.get_task_status(task_id) status = result["data"]["status"] if status == "completed": return result["data"]["task_output"] if status == "failed": raise RuntimeError(f"Task {task_id} failed: {result['data'].get('task_output')}") time.sleep(self.poll_interval) elapsed += self.poll_interval raise TimeoutError(f"Task {task_id} did not complete within {self.poll_timeout}s") ``` ## Usage Examples ### Monitor Watchlist for Buying Intent ```python import os from outx import OutXClient client = OutXClient(api_key=os.environ["OUTX_API_KEY"]) # Get recent posts sorted by relevance posts = client.get_posts( watchlist_id="your-watchlist-id", sort_by="recent_first", page=1, ) # Filter for high-engagement posts for post in posts["data"]: if post.get("likes_count", 0) > 10: print(f"Hot post by {post['author_name']}: {post['content'][:150]}") ``` ### Fetch Profile + Posts Pipeline ```python import time # Fetch profile profile = client.fetch_profile("target-prospect") print(f"Name: {profile['profile']['full_name']}") print(f"Headline: {profile['profile']['headline']}") # Use the profile URN to fetch their posts time.sleep(30) # Space out LinkedIn Data API calls urn = profile["profile"]["profile_urn"] posts = client.fetch_posts_by_urn([urn]) print(f"Found {len(posts.get('posts', []))} posts") ``` **Space out LinkedIn Data API calls.** The `fetch_profile`, `fetch_posts_by_urn`, `like_linkedin_post`, and `comment_linkedin_post` methods all execute through real LinkedIn sessions. Add `time.sleep(30)` between consecutive calls. See [Rate Limits](/api-reference/rate-limits). ### Create Watchlist + Poll for New Posts ```python # Create a keyword watchlist watchlist = client.create_keyword_watchlist( keywords=[ "looking for a CRM", {"keyword": "CRM recommendation", "exclude_keywords": ["hiring"]}, ], name="CRM Buying Intent", fetchFreqInHours=6, ) watchlist_id = watchlist["data"]["id"] print(f"Watchlist created: {watchlist_id}") # Wait for first fetch cycle, then check for posts # (posts appear after the first scan, based on fetchFreqInHours) ``` ## Error Handling The client raises standard exceptions: ```python from requests.exceptions import HTTPError try: profile = client.fetch_profile("nonexistent-slug") except HTTPError as e: if e.response.status_code == 403: print("Chrome extension not active — check your browser") elif e.response.status_code == 429: print("Rate limited — slow down") else: print(f"API error: {e.response.status_code} — {e.response.text}") except TimeoutError: print("Task timed out — Chrome extension may be offline") ``` ## Related - [API Quick Start](/api-reference/quickstart) — Watchlists & Engagement basics - [LinkedIn Data Quick Start](/linkedin-api/quickstart) — Fetch profiles end-to-end - [LangChain Integration](/integrations/langchain) — Use OutX as a LangChain tool - [Rate Limits](/api-reference/rate-limits) — Safe usage guidelines --- ## Learn More - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [How to Scrape LinkedIn Data Safely](https://www.outx.ai/blog/scrape-data-linkedin) --- # n8n Integration — Automate LinkedIn Workflows with OutX Source: https://outx.ai/docs/integrations/n8n Connect OutX to [n8n](https://n8n.io) to build automated workflows that monitor LinkedIn, enrich leads, and trigger engagement — all without writing code. ## What You Can Build | Workflow | OutX API | n8n Nodes | |----------|----------|-----------| | New LinkedIn post → Slack alert | GET `/api-posts` | Schedule Trigger → HTTP Request → Slack | | Buying intent detected → CRM lead | GET `/api-posts` + filters | Schedule Trigger → HTTP Request → HubSpot/Salesforce | | New post → AI comment → post comment | GET `/api-posts` → OpenAI → POST `/api-comment` | Schedule Trigger → HTTP Request → OpenAI → HTTP Request | | Profile fetch → lead enrichment | POST `/linkedin-agent/fetch-profile` → poll | HTTP Request → Wait → HTTP Request → Google Sheets | ## Prerequisites - An OutX account with an API key ([get your key](https://mentions.outx.ai/api-doc)) - The OutX Chrome extension installed and active - An n8n instance (cloud or self-hosted) ## Step-by-Step: LinkedIn Posts → Slack Alerts This workflow checks your watchlist every hour and sends new posts to Slack. ### 1. Schedule Trigger Add a **Schedule Trigger** node. Set it to run every 60 minutes. ### 2. Fetch Posts (HTTP Request) Add an **HTTP Request** node: - **Method:** GET - **URL:** `https://api.outx.ai/api-posts` - **Authentication:** Header Auth - **Name:** `x-api-key` - **Value:** `{{ $env.OUTX_API_KEY }}` - **Query Parameters:** - `watchlist_id`: your watchlist ID - `sort_by`: `recent_first` - `page`: `1` ### 3. Filter New Posts (Code Node) Add a **Code** node to filter posts you haven't seen: ```javascript // Store seen post IDs in static data const seen = $getWorkflowStaticData("global"); if (!seen.postIds) seen.postIds = []; const newPosts = $input.all().filter(item => { const postId = item.json.data?.id || item.json.id; if (seen.postIds.includes(postId)) return false; seen.postIds.push(postId); return true; }); // Keep only last 500 IDs to avoid memory issues if (seen.postIds.length > 500) { seen.postIds = seen.postIds.slice(-500); } return newPosts; ``` ### 4. Send to Slack Add a **Slack** node: - **Channel:** `#linkedin-alerts` - **Message:** ``` New LinkedIn post by {{ $json.author_name }}: {{ $json.content.substring(0, 300) }} Post URL: {{ $json.post_url }} Engagement: {{ $json.likes_count }} likes, {{ $json.comments_count }} comments ``` ## Step-by-Step: Fetch Profile → Google Sheets This workflow fetches a LinkedIn profile and adds the data to a Google Sheet. ### 1. Create the Task (HTTP Request) ```json { "method": "POST", "url": "https://api.outx.ai/linkedin-agent/fetch-profile", "headers": { "x-api-key": "{{ $env.OUTX_API_KEY }}", "Content-Type": "application/json" }, "body": { "profile_slug": "{{ $json.slug }}" } } ``` ### 2. Wait for Completion Add a **Wait** node set to 10 seconds, then an **HTTP Request** node to poll: ``` GET https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id={{ $json.api_agent_task_id }} ``` Add a **Switch** node to check `{{ $json.data.status }}`: - `completed` → continue to Google Sheets - `pending` or `processing` → loop back to Wait **Space out LinkedIn Data API calls.** OutX is a proxy — it does not rate-limit requests for you. Add a **Wait** node (30–60 seconds) between consecutive profile fetches. See [Rate Limits](/api-reference/rate-limits). ### 3. Write to Google Sheets Map the profile fields: | Sheet Column | n8n Expression | |-------------|----------------| | Name | `{{ $json.data.task_output.profile.full_name }}` | | Headline | `{{ $json.data.task_output.profile.headline }}` | | Location | `{{ $json.data.task_output.profile.location }}` | | LinkedIn URL | `https://linkedin.com/in/{{ $json.data.task_output.profile.profile_slug }}` | ## Tips - **Use environment variables** for your API key — never hardcode it in n8n nodes - **Add error handling** with an Error Trigger node to catch failed HTTP requests - **Rate limit LinkedIn Data API calls** — add Wait nodes (30–60s) between consecutive requests - **Use n8n's static data** to track which posts you've already processed ## Related - [API Quick Start](/api-reference/quickstart) — Watchlists & Engagement API basics - [LinkedIn Data Quick Start](/linkedin-api/quickstart) — Fetch profiles and posts - [Rate Limits](/api-reference/rate-limits) — Safe usage guidelines - [Use Cases](/api-reference/use-cases) — Common API workflows --- ## Learn More - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [LinkedIn Slack Integration](https://www.outx.ai/blog/linkedin-slack-integration) --- # LangChain Integration — Build AI Agents with LinkedIn Data Source: https://outx.ai/docs/integrations/langchain Use OutX as a [LangChain tool](https://python.langchain.com/docs/how_to/#tools) to give your AI agents real-time access to LinkedIn data — fetch profiles, retrieve posts, and engage with content. ## What You Can Build - **Research agent** — fetch LinkedIn profiles and posts, summarize them, generate outreach - **Sales signal agent** — monitor watchlists for buying intent, auto-generate personalized comments - **Competitive intelligence agent** — track competitor mentions, summarize trends ## Prerequisites - Python 3.9+ - `pip install langchain langchain-openai requests` - OutX API key ([get yours](https://mentions.outx.ai/api-doc)) - OutX Chrome extension installed and active ## OutX Tools for LangChain Create custom tools that wrap OutX API endpoints: ```python import os import time import requests from langchain.tools import tool OUTX_API_KEY = os.environ["OUTX_API_KEY"] BASE_URL = "https://api.outx.ai" HEADERS = {"x-api-key": OUTX_API_KEY, "Content-Type": "application/json"} @tool def fetch_linkedin_profile(profile_slug: str) -> dict: """Fetch a LinkedIn profile by slug. Returns name, headline, location, experience.""" # Create task resp = requests.post( f"{BASE_URL}/linkedin-agent/fetch-profile", headers=HEADERS, json={"profile_slug": profile_slug}, ) task_id = resp.json()["api_agent_task_id"] # Poll for result for _ in range(30): result = requests.get( f"{BASE_URL}/linkedin-agent/get-task-status", headers={"x-api-key": OUTX_API_KEY}, params={"api_agent_task_id": task_id}, ).json() if result["data"]["status"] == "completed": return result["data"]["task_output"] if result["data"]["status"] == "failed": return {"error": "Task failed", "output": result["data"]["task_output"]} time.sleep(5) return {"error": "Task timed out"} @tool def get_watchlist_posts(watchlist_id: str, page: int = 1) -> dict: """Get recent LinkedIn posts from a watchlist. Returns post content, author, engagement metrics.""" resp = requests.get( f"{BASE_URL}/api-posts", headers={"x-api-key": OUTX_API_KEY}, params={ "watchlist_id": watchlist_id, "sort_by": "recent_first", "page": page, }, ) return resp.json() @tool def comment_on_post(post_id: str, user_email: str, comment_text: str) -> dict: """Comment on a LinkedIn post from a watchlist. Requires post_id from get_watchlist_posts.""" resp = requests.post( f"{BASE_URL}/api-comment", headers=HEADERS, json={ "post_id": post_id, "user_email": user_email, "comment_text": comment_text, "actor_type": "user", }, ) return resp.json() ``` ## Build the Agent ```python from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate # Define tools tools = [fetch_linkedin_profile, get_watchlist_posts, comment_on_post] # Create prompt prompt = ChatPromptTemplate.from_messages([ ("system", """You are a LinkedIn research assistant. You can: 1. Fetch LinkedIn profiles to learn about people 2. Get posts from watchlists to find relevant conversations 3. Comment on posts (only when explicitly asked) When fetching profiles, extract the profile slug from LinkedIn URLs. For linkedin.com/in/williamhgates, the slug is 'williamhgates'. Always be respectful and professional in any comments you generate."""), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), ]) # Create agent llm = ChatOpenAI(model="gpt-4o") agent = create_tool_calling_agent(llm, tools, prompt) executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # Run result = executor.invoke({ "input": "Fetch the LinkedIn profile for williamhgates and summarize their background" }) print(result["output"]) ``` ## Example: Sales Signal Agent An agent that monitors your watchlist for buying intent and drafts personalized comments: ```python result = executor.invoke({ "input": """Check watchlist WATCHLIST_ID for posts with buying intent (people asking for tool recommendations, comparing solutions, or expressing pain points). For the top 3 most relevant posts, draft a helpful comment that adds value without being salesy. Show me the drafts but do NOT post them yet.""" }) ``` ## Rate Limit Considerations **OutX is a proxy — it does not rate-limit LinkedIn Data API calls for you.** When using `fetch_linkedin_profile` in loops or agents, add delays between calls: ```python import time # Between consecutive profile fetches time.sleep(30) ``` See [Rate Limits](/api-reference/rate-limits) for safe usage guidelines per endpoint. ## Tips - **Start with read-only tools** — get `fetch_linkedin_profile` and `get_watchlist_posts` working before adding engagement tools - **Add human-in-the-loop** for engagement — use `HumanApprovalCallbackHandler` before posting comments - **Cache profile data** — store fetched profiles locally to avoid redundant API calls - **Use watchlists for monitoring** — don't poll the LinkedIn Data API repeatedly; create watchlists for ongoing tracking ## Related - [AI Agent Onboarding](/ai) — Skill file and guardrails for AI agents - [OutX Skill File](https://outx.ai/docs/outx-skill.md) — Full API reference for agents - [LinkedIn Data Quick Start](/linkedin-api/quickstart) — End-to-end fetch example - [Use Cases](/api-reference/use-cases) — Common API workflows --- ## Learn More - [LinkedIn API Guide](https://www.outx.ai/blog/linkedin-api-guide) - [Best AI Tools for LinkedIn](https://www.outx.ai/blog/best-ai-tools-linkedin) --- # Chrome Extension Source: https://outx.ai/docs/resources/chrome-extension ## Why OutX Needs a Chrome Extension OutX uses a Chrome extension to interact with LinkedIn on your behalf. Instead of asking for your LinkedIn password or accessing your cookies, the extension works within your browser session to read LinkedIn data and perform engagement actions. This approach is: - **Secure** - Your LinkedIn credentials are never shared with OutX - **Privacy-first** - No cookies are accessed or stored by OutX servers - **Reliable** - Uses your authentic browser session, just like you browsing LinkedIn manually The extension is the execution engine that powers keyword tracking, profile monitoring, auto-engagement, and data exports. The Chrome extension must be installed and running for OutX to function. Without it, OutX cannot read LinkedIn data or perform any engagement actions. --- ## How to Install You can also learn more about the extension on the [OutX Chrome Extension page](https://www.outx.ai/chrome-extension). Visit the [OutX Chrome Extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj) page in the Chrome Web Store. Click the **"Add to Chrome"** button and confirm the installation when prompted. Click the OutX extension icon in your Chrome toolbar and sign in with your OutX account. Make sure you are signed in to LinkedIn in the same browser. The extension uses your active LinkedIn session. Go to your [OutX dashboard](https://mentions.outx.ai) and confirm that data is syncing. --- ## What Permissions Are Required When you install the extension, Chrome will ask you to approve certain permissions. Here is what each permission is used for and why it is needed. ### LinkedIn (linkedin.com) **Why:** This is the core functionality of OutX. The extension reads LinkedIn posts, profiles, and company pages to power your watchlists, tracking, and auto-engagement features. ### X.com (formerly Twitter) **Why:** Used for cross-platform social monitoring features. OutX can track relevant conversations across platforms to give you a broader view of buyer intent signals. ### Reddit (reddit.com) **Why:** Enables Reddit tracking features. OutX monitors subreddits and discussions for keywords relevant to your watchlists. ### Quora (quora.com) **Why:** Supports cross-platform intent monitoring by tracking relevant questions and answers on Quora. OutX only reads publicly visible content on these platforms. The extension does not post, message, or modify anything on X.com, Reddit, or Quora without your explicit action. --- ## Privacy and Security OutX is designed with your security in mind: - **No password sharing** - OutX never asks for or stores your LinkedIn password - **No cookie theft** - Your browser cookies are not copied or sent to OutX servers - **Session-based** - The extension uses your existing browser session, exactly as if you were browsing manually - **Read-only by default** - The extension only reads public content unless you explicitly enable engagement actions (likes, comments) - **Local execution** - All LinkedIn interactions happen in your browser, not from remote servers --- ## Does It Work When My Browser Is Closed? **No.** The OutX Chrome extension must be actively running in your browser for any of the following to work: - Keyword watchlist data fetching - Profile and company tracking updates - Auto-engagement rules (auto-like, auto-comment) - Sales Navigator data exports - Feed updates and sync If your browser is closed or your computer is off, OutX cannot fetch data or execute engagement actions. Auto-engagement rules will resume automatically when you open Chrome again. For best results, keep Chrome open with the OutX extension running during your working hours. You do not need to keep LinkedIn open in a tab - the extension works in the background. --- ## Plugin Requirement for API Users If you are using the [OutX API](/api-reference/introduction), at least one team member must have the Chrome extension installed and active within the last **48 hours**. This is a security and functionality requirement. If no team member has had the extension active recently, API requests will return a `403` error: ```json { "error": "Plugin installation required: Please install the OutX browser extension on at least one team member's account to use the API. The plugin must have been active within the last 48 hours." } ``` **To resolve this:** Have any team member open Chrome with the OutX extension installed and signed in. The extension will automatically register as active. --- ## Troubleshooting ### Extension Won't Download or Install - Make sure you are using **Google Chrome** (not Firefox, Safari, or Edge) - Check that your Chrome version is up to date (Menu > Help > About Google Chrome) - Disable any browser extensions that may block installations - Try downloading from a clean Chrome profile ### JavaScript Error During Installation - Clear your browser cache (Settings > Privacy > Clear browsing data) - Disable other extensions temporarily and try again - Restart Chrome completely and reinstall ### Extension Not Syncing Data 1. Click the OutX extension icon and verify you are signed in 2. Confirm you are signed in to LinkedIn in the same browser 3. Try disabling and re-enabling the extension (chrome://extensions) 4. Clear browser cache and restart Chrome 5. Uninstall and reinstall the extension if the issue persists ### LinkedIn Detecting Automation If LinkedIn shows a warning or security prompt: 1. **Reduce your engagement frequency** - Lower auto-like and auto-comment limits to 1-3 per hour 2. **Pause auto-engagement rules** temporarily for 24-48 hours 3. **Complete any LinkedIn security verification** (CAPTCHA, phone verification) 4. Re-enable rules at lower frequencies after the warning clears See our [LinkedIn Safety guide](/resources/linkedin-safety) for detailed best practices. ### LinkedIn Logging You Out This is a standard LinkedIn security check that can happen regardless of OutX. Simply: 1. Log back in to LinkedIn 2. Complete any verification LinkedIn requests 3. The extension will resume working automatically --- ## FAQs No. The Chrome extension is required for all OutX features. It is how OutX reads LinkedIn data and performs actions on your behalf. Currently, OutX only supports Google Chrome. Other Chromium-based browsers (like Brave or Edge) may work but are not officially supported. No. The extension works in the background. You just need Chrome to be open and to be signed in to LinkedIn. The extension is lightweight and runs background tasks efficiently. You should not notice any significant impact on browser performance. Yes, but the extension only works on the computer where Chrome is currently running. Auto-engagement and tracking will only function on whichever machine has Chrome open with the extension active. Chrome updates extensions automatically. You can also manually check for updates at chrome://extensions by enabling Developer mode and clicking "Update". --- ## Related Resources How OutX keeps your LinkedIn account safe Solutions for common OutX issues Setting up API access with the plugin requirement Configure auto-like and auto-comment rules --- # LinkedIn Account Safety Source: https://outx.ai/docs/resources/linkedin-safety ## How OutX Interacts with LinkedIn OutX interacts with LinkedIn through a [Chrome extension](/resources/chrome-extension) that runs in your browser. This means: - All actions happen within your real browser session - LinkedIn sees activity from your normal browser, IP address, and device - No headless browsers, no remote servers, no direct API scraping - OutX mimics the exact same behavior as you manually browsing LinkedIn This is fundamentally different from tools that use headless browsers, proxy servers, or LinkedIn's undocumented APIs from external servers - all of which are more easily detected and carry higher risk. --- ## Built-In Safety Mechanisms OutX includes several layers of protection to keep your LinkedIn account safe. ### Rate Limiting Every engagement action (likes, comments) is rate-limited on a per-hour basis. You control the maximum number of actions per hour when creating engagement rules. ### Natural Delays OutX introduces randomized delays between actions to mimic natural human browsing patterns. Actions are not executed in rapid succession. ### Session-Based Execution Because OutX runs in your browser, LinkedIn sees a consistent device fingerprint, IP address, and session - exactly the same as when you browse LinkedIn manually. ### Alarm-Driven Scheduling The extension uses scheduled intervals to space out data fetching and engagement, avoiding burst patterns that could trigger LinkedIn's detection systems. --- ## What OutX Does NOT Do Understanding what OutX avoids is just as important as knowing what it does: - **No password sharing** - OutX never asks for your LinkedIn password - **No cookie theft** - Your cookies are never copied or sent to external servers - **No bulk connection requests** - OutX does not send connection requests - **No mass messaging** - OutX does not send LinkedIn messages or InMails - **No headless browser access** - All actions happen in your real Chrome browser - **No direct API scraping** - OutX does not call LinkedIn's internal APIs from remote servers --- ## Safe Engagement Limits When setting up auto-engagement rules, we recommend staying within these limits for optimal safety: | Action | Recommended Limit | Maximum Safe Limit | |--------|-------------------|-------------------| | Auto-Likes | 1-3 per hour | 5 per hour | | Auto-Comments | 1-2 per hour | 3 per hour | Start with lower limits (1 per hour) and gradually increase over a few days. This helps LinkedIn see your activity as a natural progression rather than a sudden change in behavior. Setting engagement limits too high (10+ actions per hour) increases the chance of LinkedIn flagging your account. Always prioritize quality over quantity. --- ## What to Do If LinkedIn Warns You If LinkedIn displays a warning message about unusual activity or automation: Immediately disable all auto-engagement rules in your OutX dashboard. Go to your watchlists and turn off any active auto-like or auto-comment rules. Follow any steps LinkedIn asks you to take - this might include a CAPTCHA, phone verification, or email confirmation. This is a standard security check. Give LinkedIn time to clear the flag. Continue using LinkedIn normally (manual browsing, posting) during this period. After the waiting period, re-enable your engagement rules at reduced limits. Start at 1 action per hour and increase gradually over several days. If warnings persist after reducing limits, contact [support@outx.ai](mailto:support@outx.ai) for personalized guidance. --- ## What to Do If LinkedIn Logs You Out LinkedIn periodically logs users out as a security measure. This happens to all LinkedIn users, not just OutX users. When it happens: 1. Log back in to LinkedIn as you normally would 2. Complete any verification LinkedIn requests (this is standard) 3. The OutX extension will detect your session and resume working automatically Occasional logouts are normal LinkedIn behavior and are not necessarily caused by OutX. LinkedIn may log you out when it detects a new IP address, browser update, or as a routine security check. --- ## OutX vs. Other Automation Tools Not all LinkedIn tools are created equal. Here is how OutX compares to riskier approaches: | Approach | Risk Level | How It Works | |----------|-----------|--------------| | **OutX (browser extension)** | Low | Runs in your real browser, uses your session, respects rate limits | | **Direct API scraping** | High | Calls LinkedIn APIs from external servers, easily detected | | **Headless browsers** | High | Simulates a browser from a server, different fingerprint than your device | | **Cookie-based tools** | High | Copies your cookies to external servers, violates LinkedIn ToS | | **Credential-sharing tools** | Very High | Stores your password, logs in from multiple locations | OutX's browser-extension approach is the safest method of LinkedIn automation because it uses your real browser environment, making activity indistinguishable from manual browsing. --- ## FAQs OutX is designed to minimize risk by running in your real browser with built-in rate limiting. However, any automation carries some inherent risk. By following the recommended engagement limits and best practices outlined on this page, you significantly reduce that risk. Thousands of users use OutX daily without issues. LinkedIn's Terms of Service restrict certain types of automation, particularly those involving scraping, fake accounts, and mass messaging. OutX does not perform any of these activities. OutX operates as a browser extension that assists with your normal LinkedIn browsing activity. Because OutX runs inside your real browser, the actions it performs look identical to manual browsing. There is no separate server, headless browser, or API call for LinkedIn to detect. Following the recommended rate limits further reduces any detection risk. Each team member should connect their own LinkedIn account through the extension. Do not use OutX to operate multiple LinkedIn accounts from a single browser profile - this is against LinkedIn's policies and increases risk. Not necessarily, but be mindful of your total activity. If you are manually liking 20 posts per hour AND have auto-engagement running, the combined activity may be too high. Adjust your auto-engagement limits to account for your manual usage. Yes. OutX works with all LinkedIn account types including free, Premium, and Sales Navigator. The extension uses whichever LinkedIn subscription you are signed in with. --- ## Related Resources Installation and setup guide Configure auto-like and auto-comment rules safely Fix common issues with OutX Answers to frequently asked questions --- ## Learn More - [LinkedIn Automation Safety Guide](https://www.outx.ai/blog/linkedin-automation-safety-guide-best-practices-2026) - [LinkedIn Scraping Myths Debunked](https://www.outx.ai/blog/linkedin-scraping-myths-debunked) - [LinkedIn Scraping vs Manual Prospecting](https://www.outx.ai/blog/linkedin-scraping-vs-manual-prospecting) --- # Account Management Source: https://outx.ai/docs/resources/account-management ## Cancel Your Subscription You can cancel your OutX subscription at any time using one of two methods: ### Method 1: Paddle Billing Section Log in to your [OutX dashboard](https://mentions.outx.ai) and navigate to the billing section. Click **"Manage Subscription"** to open the Paddle billing portal. Click **"Cancel Subscription"** and follow the prompts to confirm. ### Method 2: Email Support Send an email to [support@outx.ai](mailto:support@outx.ai) from the email address associated with your OutX account. Include "Cancel Subscription" in the subject line. If you are on a free trial, you must cancel **before** the 7-day trial ends to avoid being charged. See [Billing & Payments](/resources/billing-and-payments) for trial details. ### What Happens After Cancellation - Your plan remains **active until the end of your current billing period** - You will not be charged again after the current period ends - No partial refunds are issued for unused time within the billing period - Your data remains accessible until the end of the billing period - After the billing period ends, your account reverts to limited access --- ## Delete Your Account To permanently delete your OutX account and all associated data: 1. Send an email to [support@outx.ai](mailto:support@outx.ai) **from the email address registered to your account** 2. Include "Delete My Account" in the subject line 3. The support team will process your request and confirm deletion Account deletion is permanent. All your watchlists, tracking data, engagement history, and team settings will be permanently removed. This action cannot be undone. --- ## Change Your Email Address Changing your account email is not available as a self-service option. To update your email: 1. Email [support@outx.ai](mailto:support@outx.ai) from your **current** registered email address 2. Include your new email address in the message 3. The support team will update your account and confirm the change --- ## Team Management ### Add Team Members Log in to your [OutX dashboard](https://mentions.outx.ai) and navigate to **Team Settings**. Click **"Invite"** and enter the email address of the person you want to add. The invited member will receive an email with instructions to join your team. Once they accept the invitation and create (or sign in to) their OutX account, they will appear in your team. The number of team members you can add depends on your plan. Free plans support up to 5 members. Paid plans support 10 to unlimited members depending on the tier. See [Pricing & Subscription](/documentation/pricing-and-subscription) for details. ### Remove Team Members 1. Go to **Team Settings** in your dashboard 2. Find the team member you want to remove 3. Click the remove or delete option next to their name 4. Confirm the removal Removed members will immediately lose access to your team's watchlists and data. --- ## Connect a LinkedIn Account Each team member connects their own LinkedIn account through the Chrome extension: Install the [OutX Chrome Extension](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj) from the Chrome Web Store. Click the extension icon in Chrome and sign in with your OutX account. Make sure you are logged in to LinkedIn in the same browser. The extension will automatically detect your LinkedIn session. For detailed setup instructions, see the [Chrome Extension guide](/resources/chrome-extension). ## Disconnect LinkedIn To disconnect your LinkedIn account from OutX: 1. **Disable the extension** - Right-click the OutX icon in Chrome and select "Manage Extension", then toggle it off 2. **Or uninstall the extension** - Go to chrome://extensions, find OutX, and click "Remove" Once the extension is disabled or removed, OutX will no longer access your LinkedIn data. --- ## Manage Multiple LinkedIn Accounts OutX supports multiple LinkedIn accounts within a team: - Each team member connects their **own** LinkedIn account via the extension - Each member's LinkedIn activity (tracking, engagement) is tied to their own account - You cannot connect multiple LinkedIn accounts from a single browser profile Do not attempt to run multiple LinkedIn accounts from the same browser. This violates LinkedIn's Terms of Service and increases the risk of account restrictions. Each team member should use their own browser profile and LinkedIn account. --- ## FAQs Cancellation is immediate - your plan stays active until the end of the current billing period, but you will not be charged again. Yes. You can resubscribe at any time by logging in and selecting a new plan. However, your previous data may no longer be available depending on how long your account was inactive. Account transfers are not available as a self-service option. Contact [support@outx.ai](mailto:support@outx.ai) to discuss your situation. Data generated by the team member (watchlist contributions, tracked posts) remains in the team workspace. Their personal LinkedIn connection is removed when they are removed from the team. Contact [support@outx.ai](mailto:support@outx.ai) if you need to be part of multiple OutX teams. --- ## Related Resources Trial details, payment help, and plan changes View all plans and features Install and set up the OutX extension Fix common account and setup issues --- # Billing & Payments Source: https://outx.ai/docs/resources/billing-and-payments ## Free Trial All paid OutX plans include a **7-day free trial** with full feature access. ### Trial Details - **Duration:** 7 days from signup - **Features:** Full access to all features in your selected plan - **Credit card required:** Yes - a valid credit card is required to start the trial - **Auto-charges:** If you do not cancel before the trial ends, you will be automatically charged at your plan's regular rate Your credit card will be charged automatically when the 7-day trial ends. To avoid charges, cancel your subscription **before** the trial expires. See [Account Management](/resources/account-management) for cancellation instructions. ### Why Is a Credit Card Required? A credit card is required for the free trial to: - **Prevent fraud and abuse** - Ensures genuine users are accessing the platform - **Provide uninterrupted access** - If you choose to continue, your service continues seamlessly without interruption You will **not** be charged during the trial period. If you cancel before the trial ends, no charge is made. --- ## Free Plan OutX offers a **free Personal Branding plan** that does not require payment: - 2 private watchlists - 5 team members - 1 auto-engagement rule per watchlist - 12/24 hour fetch frequency - Email notifications - 28 days historical data A credit card is required to create an account, but you are **not charged** on the free plan. The free plan does not include Social Listening features - those require a paid plan. --- ## What Happens After the Trial Expires If you do **not** cancel before your 7-day trial ends: 1. Your credit card is automatically charged at the plan rate you selected 2. Your subscription begins its first billing cycle 3. You continue to have full access to all features If you **do** cancel before the trial ends: 1. No charge is made 2. Your access continues until the trial period expires 3. After the trial expires, your account reverts to the free plan (if available) or limited access --- ## Payment Processor OutX uses **Paddle** as its payment processor. Paddle handles: - All billing and subscription management - Credit card processing - VAT calculation and collection - Invoice and receipt generation - Refund processing All payment-related emails (receipts, invoices, subscription confirmations) come from Paddle. --- ## Upgrade Your Plan To upgrade your OutX plan: 1. Log in to your [OutX dashboard](https://mentions.outx.ai) 2. Navigate to the **billing section** 3. Select the plan you want to upgrade to 4. Confirm the upgrade Upgrades take effect **immediately**. You will be charged a prorated amount for the remainder of your current billing cycle. You can also email [support@outx.ai](mailto:support@outx.ai) to request a plan change. --- ## Downgrade Your Plan To downgrade to a lower-tier plan: 1. Email [support@outx.ai](mailto:support@outx.ai) with your desired plan 2. Or use the Paddle billing portal to change your subscription Downgrades take effect at the **next billing cycle**. You retain full access to your current plan features until the end of the current billing period. --- ## Payment Troubleshooting ### OTP Loop or Authentication Failure If you are stuck in an OTP (one-time password) loop during payment or seeing authentication errors: 1. **Try a different browser** - Switch from Chrome to Firefox or vice versa 2. **Disable browser extensions** - Ad blockers or privacy extensions can interfere with Paddle's payment flow 3. **Try a different card** - Some banks decline international or recurring transactions 4. **Contact your bank** - Ask them to approve the transaction with Paddle 5. **Clear cookies and cache** - Then try the payment again 6. If the issue persists, email [support@outx.ai](mailto:support@outx.ai) with details of the error ### Card Not Processing - Verify your card details are entered correctly - Ensure your card supports international transactions - Check that your card has not expired - Contact your bank to confirm no blocks on the transaction - Try an alternative payment method ### "Why Was I Charged?" If you see an unexpected charge from OutX (via Paddle): - **Most common reason:** Your 7-day free trial ended without cancellation, triggering the automatic charge - Check your email for a receipt from Paddle confirming the charge - If you believe the charge is in error, email [support@outx.ai](mailto:support@outx.ai) immediately --- ## Refund Policy - **No partial refunds** are issued for unused time within a billing period - If you cancel mid-cycle, your plan remains active until the end of the current billing period - For billing disputes or special circumstances, contact [support@outx.ai](mailto:support@outx.ai) --- ## Invoices and Receipts All invoices and receipts are managed through Paddle: 1. Check your email for receipts sent by Paddle after each payment 2. Access the Paddle billing portal from your OutX dashboard billing section 3. Download invoices directly from the Paddle portal If you need a specific invoice format or have tax documentation requirements, contact [support@outx.ai](mailto:support@outx.ai). --- ## OutX Credits Some OutX features use a credit-based system: - **1 credit = 1 exported lead** (from Sales Navigator) - **1 credit = 1 email found** (via email finder) Credits are included with your plan and vary by tier. Additional credit packages are available for purchase. See [Pricing & Subscription](/documentation/pricing-and-subscription) for credit package details. --- ## FAQs The free trial is 7 days with full access to all features in your selected plan. No. If you cancel before the 7-day trial ends, no charge is made to your credit card. Yes. Contact [support@outx.ai](mailto:support@outx.ai) to switch plans during your trial period. OutX accepts major credit and debit cards through Paddle. Specific accepted methods depend on your region and Paddle's available payment options. Contact [support@outx.ai](mailto:support@outx.ai) to ask about annual billing options. Contact [support@outx.ai](mailto:support@outx.ai) for details on credit rollover policies for your specific plan. OutX does not offer partial refunds for unused time. If you believe a charge was made in error, email [support@outx.ai](mailto:support@outx.ai) as soon as possible. --- ## Related Resources View all plans, features, and credit packages Cancel, delete, or manage your account Learn about Sales Navigator exports and credits Answers to frequently asked questions --- # Troubleshooting Source: https://outx.ai/docs/resources/troubleshooting ## Feed Not Updating / Sync Stuck If your watchlist feed is not showing new posts or appears stuck: Make sure the OutX Chrome extension is installed, enabled, and you are signed in. Click the extension icon to verify your status. Verify you are logged in to LinkedIn in the same browser. Open linkedin.com to confirm. Go to your watchlist settings and verify the fetch frequency. If set to 24 hours, new posts may take up to 24 hours to appear. Disable and re-enable the extension at chrome://extensions. This forces a fresh sync cycle. Clear your browser cache, restart Chrome, and sign back in to both OutX and LinkedIn. The extension must be running in your browser for feeds to update. If your browser is closed or your computer is off, no new data will be fetched. See [Chrome Extension](/resources/chrome-extension) for details. --- ## Posts Not Appearing in Watchlist If your keyword watchlist is not showing expected posts: - **New keywords only track forward** - When you add a keyword, OutX begins tracking from that moment onward. Previously published posts are not backfilled. - **Check excluded keywords** - Make sure your excluded keywords are not accidentally filtering out the posts you want to see. A broad excluded keyword can block many relevant posts. - **Check keyword specificity** - Very broad keywords may produce too much noise, while very specific keywords may not match many posts. Try adjusting your keyword combination. - **Allow time for fetching** - Depending on your fetch frequency (4, 12, or 24 hours), it may take one full cycle before new posts appear. - **Check filters** - If you have filters applied to your feed view (location, seniority, post type), try removing them to see if posts appear without filters. --- ## Sales Navigator Export Stuck at 0% If a Sales Navigator export is showing 0% progress or not starting: 1. **Verify your Sales Navigator subscription** - An active LinkedIn Sales Navigator subscription is required. Open Sales Navigator directly in LinkedIn to confirm access. 2. **Check the extension is running** - The Chrome extension must be active during the export. Do not close Chrome. 3. **Refresh the page** - Sometimes the progress indicator needs a page refresh to update. 4. **Try a smaller export** - If exporting a large list, try a smaller selection first to verify the feature works. 5. **Reinstall the extension** - If the issue persists, uninstall and reinstall the OutX extension. Sales Navigator exports run through the Chrome extension and require both the extension and an active Sales Navigator session. The export speed depends on the number of leads and LinkedIn's response time. --- ## Extension Not Syncing / Not Working If the OutX extension is installed but not functioning: 1. **Disable and re-enable** - Go to chrome://extensions, toggle OutX off, wait 5 seconds, toggle it back on 2. **Clear browser cache** - Settings > Privacy > Clear browsing data > Clear cache 3. **Check Chrome version** - Ensure Chrome is up to date (Menu > Help > About Google Chrome) 4. **Reinstall the extension** - Remove the extension and install it fresh from the [Chrome Web Store](https://chromewebstore.google.com/detail/outxai-track-linkedin-pos/epnimaeheelhgeelbppbfkjegklflakj) 5. **Check for conflicts** - Other LinkedIn-related extensions may conflict with OutX. Try disabling other extensions temporarily 6. **Try a clean Chrome profile** - Create a new Chrome profile to rule out profile-level issues --- ## "Plugin Installation Required" API Error When using the OutX API, you may see this error: ```json { "error": "Plugin installation required: Please install the OutX browser extension on at least one team member's account to use the API. The plugin must have been active within the last 48 hours." } ``` **What this means:** The OutX API requires at least one team member to have the Chrome extension installed and actively running within the last 48 hours. **How to fix it:** 1. Have any team member open Chrome with the OutX extension installed 2. Make sure they are signed in to both OutX and LinkedIn 3. The extension will automatically register as active 4. Wait a few minutes and retry your API request This is a security requirement. The extension validates that your team has an active browser session, which is necessary for OutX to process API requests against LinkedIn data. See [API Authentication](/api-reference/authentication) for more details. --- ## Comments Posting Under Wrong Name If auto-comments are appearing under a different LinkedIn account than expected: 1. **Check the engagement rule** - Open the engagement rule and verify which LinkedIn account is selected under "Choose Account" 2. **Verify active sessions** - If multiple team members are connected, make sure the correct member's extension is active 3. **Check company page selection** - If you selected a company page, comments will post as the company, not your personal profile 4. **Reconnect if needed** - Disable and re-enable the extension to refresh the LinkedIn session --- ## Auto-Engagement Not Working Reliably If auto-like or auto-comment rules are not executing consistently: - **Extension must be running** - Auto-engagement only works when Chrome is open with the extension active. It does not work when your browser is closed or computer is off. - **Check if the rule is activated** - Open the engagement rule and confirm the toggle is set to Active. - **Check hourly limits** - If you set a limit of 1 per hour, there will be at most 1 engagement action per hour. Lower limits mean less frequent activity. - **Check post filters** - Advanced filters (intent, seniority, post type) may be limiting which posts qualify for engagement. - **Wait for new posts** - Engagement only happens on new posts that match your watchlist criteria. If no new matching posts appear, no engagement occurs. See [Auto-Engagement](/documentation/linkedin-social-listening/auto-engagement) for setup instructions and [LinkedIn Safety](/resources/linkedin-safety) for recommended limits. --- ## Watchlist Not Showing Results If you created a watchlist but see no results: - **Allow time** - New watchlists start tracking from creation. Wait at least one full fetch cycle (based on your frequency setting) for results to appear. - **Check keyword specificity** - Highly specific multi-word phrases may not match many LinkedIn posts. Try broader keywords or use "must also include" for combinations instead of one long phrase. - **Verify LinkedIn has matching content** - Search for your keywords directly on LinkedIn to confirm posts exist with those terms. - **Check the extension** - The extension must be running to fetch watchlist data. --- ## OTP Not Received During Signup If you are not receiving the one-time password during account signup: 1. **Check your spam/junk folder** - OTP emails sometimes end up in spam 2. **Wait 2-3 minutes** - Delivery can sometimes be delayed 3. **Click "Resend"** - Use the resend option on the signup page 4. **Try a different email** - If using a corporate email, try a personal email address (some corporate filters block automated emails) 5. **Contact support** - Email [support@outx.ai](mailto:support@outx.ai) if the issue persists --- ## "Event Type Not Found" When Booking a Demo If you encounter an error when trying to book a demo through the website: 1. Try the direct booking link: [Book a Demo](https://cal.com/kavya-r/15min?overlayCalendar=true) 2. If the link does not work, email [support@outx.ai](mailto:support@outx.ai) to schedule a demo directly --- ## Still Need Help? If your issue is not covered above or the suggested solutions did not resolve your problem: - **Email support:** [support@outx.ai](mailto:support@outx.ai) - Include a description of the issue, any error messages, and screenshots if possible - **Live chat:** Use the chat widget on [outx.ai](https://www.outx.ai) during business hours Extension setup and troubleshooting Handle LinkedIn warnings and stay safe Cancel, delete, or manage your account Payment issues and billing help ## Frequently Asked Questions Email [support@outx.ai](mailto:support@outx.ai) with a description of your issue, or use the live chat widget on [outx.ai](https://www.outx.ai) during business hours. The support team typically responds within a few hours. Email [support@outx.ai](mailto:support@outx.ai) with a description of the issue, screenshots if possible, and your browser and extension version. You can find your extension version at chrome://extensions by locating the OutX extension. --- # Frequently Asked Questions Source: https://outx.ai/docs/resources/faq ## General OutX is a LinkedIn monitoring and automation platform that helps you track buyer intent signals, monitor keywords and profiles, and automate engagement on LinkedIn. It works through a Chrome extension that reads LinkedIn data from your browser. OutX is built for sales teams, marketers, founders, recruiters, and agencies who want to: - Monitor LinkedIn for buying signals and intent keywords - Track specific people, companies, and conversations - Automate likes and comments to stay visible - Export leads from Sales Navigator - Build their personal brand on LinkedIn OutX uses a [Chrome extension](/resources/chrome-extension) that runs in your browser. The extension reads LinkedIn data using your active browser session - no passwords or cookies are shared. It fetches posts matching your keywords, tracks profiles and companies, and can automatically like or comment on relevant posts. No. OutX is designed for non-technical users. You can set up keyword watchlists, tracking rules, and auto-engagement through a point-and-click dashboard. The API is available for technical users who want deeper integrations, but it is not required. --- ## LinkedIn Social Listening OutX can track: - **Keyword mentions** in LinkedIn posts (buying intent, hiring signals, product mentions) - **Profile activity** (new posts from specific people) - **Company page updates** (posts from specific companies) - **Job changes and birthdays** (via people tracking) - **Comments from specific profiles** (on Expert and Ultimate plans) Yes. OutX tracks public LinkedIn posts, not just posts from your connections. If a post is publicly visible on LinkedIn, OutX can capture it when it matches your keywords. Yes. You can add hashtags as keywords in your watchlist. OutX will track posts containing those hashtags. Comment tracking from specific profiles is available on Expert and Ultimate plans. Post-level keyword monitoring is available on all plans. See [Pricing & Subscription](/documentation/pricing-and-subscription) for plan details. Yes. Location filtering is available on Expert and Ultimate plans. You can filter posts based on the location mentioned in the post or the poster's profile location. OutX uses AI-powered sentiment analysis to score posts by relevance to your watchlist criteria. You can sort your feed by relevance, recency, engagement level, or influence score. Yes. OutX supports Reddit tracking through the same Chrome extension. You can monitor subreddits and discussions for keywords relevant to your business. See [Reddit Tracking](/documentation/linkedin-social-listening/reddit-tracking) for details. --- ## Auto-Engagement You create engagement rules on your watchlists. When new posts appear that match your keywords and filters, OutX automatically likes or comments on them through the Chrome extension. You control the frequency, which posts qualify, and the comment style. **No.** The Chrome extension must be actively running in your browser for auto-engagement to work. If Chrome is closed or your computer is off, engagement pauses and resumes when you reopen Chrome. See [Chrome Extension](/resources/chrome-extension) for details. When creating an auto-comment rule, you can customize the AI comment instructions. You can also use the gear icon in the comment modal to edit the commenting instructions. This controls the tone, length, and style of generated comments. See [Auto-Engagement](/documentation/linkedin-social-listening/auto-engagement) for setup instructions. We recommend: - **Auto-likes:** 1-3 per hour (maximum 5 per hour) - **Auto-comments:** 1-2 per hour (maximum 3 per hour) Start low and increase gradually. See [LinkedIn Safety](/resources/linkedin-safety) for detailed best practices. Yes. When creating an engagement rule, you can choose to engage as your personal LinkedIn profile or as a connected company page. Select the appropriate account in the "Choose Account" step. Auto-comments post automatically based on your rules. If you prefer to review comments before posting, use the **manual AI comment** feature instead - click "Suggest Me" on any post to generate a comment, edit it, and then post it yourself. --- ## Data Export - **LinkedIn posts** from your watchlist feed (CSV export) - **Sales Navigator leads** and accounts (using OutX Credits) - **People search results** from LinkedIn - **Email addresses** found via the email finder tool For Sales Navigator lead exports, yes - an active LinkedIn Sales Navigator subscription is required. CSV exports of watchlist posts do not require Sales Navigator. Export speed depends on the number of leads and LinkedIn's response time. The Chrome extension must remain running during the entire export. Small exports (under 100 leads) typically complete within minutes. Larger exports may take longer. Yes. CSV export is available on all paid plans. You can export posts from your watchlist feed with all associated data (post content, author, date, engagement metrics, labels). --- ## Chrome Extension OutX reads LinkedIn data through your browser session. The extension allows OutX to access LinkedIn on your behalf without requiring your password or cookies. This is the safest and most reliable method of LinkedIn automation. See [Chrome Extension](/resources/chrome-extension) for full details. The extension requires access to LinkedIn (core functionality), and optionally X.com, Reddit, and Quora for cross-platform monitoring. It only reads publicly visible content on these platforms. See [Chrome Extension](/resources/chrome-extension) for a detailed breakdown. No. The Chrome extension must be running in your browser. If your computer is off or Chrome is closed, OutX cannot fetch data or perform any actions. Try these steps in order: 1. Disable and re-enable the extension at chrome://extensions 2. Verify you are signed in to both OutX and LinkedIn 3. Clear your browser cache and restart Chrome 4. Uninstall and reinstall the extension See [Troubleshooting](/resources/troubleshooting) for detailed solutions. --- ## LinkedIn Safety OutX is designed to minimize risk by running in your real browser with built-in rate limiting and natural delays. By following the recommended engagement limits, the risk is very low. Thousands of users use OutX daily without issues. See [LinkedIn Safety](/resources/linkedin-safety) for best practices. Unlike tools that use headless browsers, direct API scraping, or cookie theft, OutX runs inside your real Chrome browser. LinkedIn sees activity from your actual device, IP address, and session - making it indistinguishable from manual browsing. See the [safety comparison](/resources/linkedin-safety#outx-vs-other-automation-tools) for details. Pause auto-engagement immediately, complete any verification LinkedIn requests, wait 24-48 hours, and re-enable at lower limits. See [LinkedIn Safety](/resources/linkedin-safety) for step-by-step instructions. --- ## API Log in to your OutX account, visit [mentions.outx.ai/api-doc](https://mentions.outx.ai/api-doc), and click **"Reveal API Key"**. See [API Authentication](/api-reference/authentication) for full details. The OutX API requires at least one team member to have the Chrome extension active within the last 48 hours. This is a security requirement that ensures your team has a valid browser session for LinkedIn data processing. See [Chrome Extension](/resources/chrome-extension#plugin-requirement-for-api-users) for details. Rate limits depend on your plan: - **Free Plan:** 100 requests/hour - **Pro Plan:** 1,000 requests/hour - **Enterprise Plan:** Custom limits Contact [support@outx.ai](mailto:support@outx.ai) for higher limits. See [API Authentication](/api-reference/authentication#rate-limiting) for details. Yes. The Posts API supports date range filtering using the `posted_after` and `posted_before` parameters. See the [Posts API](/api-reference/engagement/posts/get) documentation for all available filters. --- ## LinkedIn API (Proxy) The OutX LinkedIn API is a proxy service that lets you fetch LinkedIn profiles, retrieve posts, and perform engagement actions (likes, comments) through a simple REST API. It handles LinkedIn's complexity behind the scenes. The **Intelligence API** (main OutX API) is for managing watchlists, retrieving tracked posts, and automating engagement within your OutX workspace. The **LinkedIn API (Proxy)** provides direct LinkedIn data access - fetch any profile, retrieve any user's posts, and engage on specific posts by URL. See the [LinkedIn API Introduction](/linkedin-api/introduction) for details. Some LinkedIn API actions (like fetching profiles or posts) are processed asynchronously. You submit a request and receive a task ID, then poll the [task status endpoint](/linkedin-api/get-task-status) to get the result. This is because LinkedIn data fetching happens through the browser extension and may take a few seconds. See the [LinkedIn API Quickstart](/linkedin-api/quickstart) for examples. --- ## Pricing & Billing Yes. OutX offers a free Personal Branding plan with 2 watchlists, 5 team members, and basic features. A credit card is required but you are not charged. Social Listening features require a paid plan. 7 days with full access to all features in your selected plan. A credit card is required. Cancel before the trial ends to avoid charges. See [Billing & Payments](/resources/billing-and-payments) for details. Credits are used for Sales Navigator lead exports and email finding. 1 credit = 1 exported lead or 1 email found. Credits are included with your plan and additional packages are available. See [Pricing & Subscription](/documentation/pricing-and-subscription) for credit packages. Cancel through the Paddle billing section in your dashboard, or email [support@outx.ai](mailto:support@outx.ai). Your plan stays active until the end of the billing period. See [Account Management](/resources/account-management) for step-by-step instructions. OutX does not offer partial refunds for unused time. If you believe a charge was made in error, contact [support@outx.ai](mailto:support@outx.ai) immediately. See [Billing & Payments](/resources/billing-and-payments#refund-policy) for the full policy. --- ## Account Cancel your subscription through the Paddle billing portal or by emailing [support@outx.ai](mailto:support@outx.ai). See [Account Management](/resources/account-management) for detailed instructions. Email [support@outx.ai](mailto:support@outx.ai) from your registered email address with "Delete My Account" in the subject line. Account deletion is permanent. Email [support@outx.ai](mailto:support@outx.ai) from your current registered email address with your new email. The support team will update your account. Go to Team Settings in your dashboard and click "Invite". Enter the team member's email address. Team limits depend on your plan. See [Account Management](/resources/account-management#team-management) for details. Contact [support@outx.ai](mailto:support@outx.ai) to discuss multi-team setups. --- ## Need More Help? support@outx.ai Schedule a walkthrough Step-by-step solutions ---