{"slug": "extract-linkedin-profile-data-with-mcp-for-contact-research", "title": "Extract LinkedIn Profile Data with MCP for Contact Research", "summary": "BrowserAct published a LinkedIn Profile Scraper Bot that lets an MCP-connected AI agent pull visible profile fields — name, headline, current position, company, about, experience, education and contact info — from a user-supplied list of personal profile URLs. The template preserves input order and repeated URLs, returns one record per nonempty input including error-status records, and keeps collected facts separate from the agent's own notes so users can verify role changes before meetings. The company recommends running a small batch of verifiable profiles first to confirm coverage before processing a full list.", "body_md": "You are preparing for meetings with people whose LinkedIn profile URLs are already in your notes. Your AI agent needs their visible professional details to organize the research, connect each person to a source and identify questions that still need an answer.\n\nYou can extract LinkedIn profile data through an MCP-connected AI agent using a published BrowserAct Bot. Prepare a personal LinkedIn Profile Scraper Bot with your own login, give the agent your URLs, and have it retrieve the actual results before building the research table. MCP (Model Context Protocol) lets the agent use BrowserAct's tools in the conversation.\n\nThe useful result includes the table, a coverage summary and a follow-up list. Collected facts stay separate from the agent's notes, so you can check a role change or missing detail before using it in a meeting.\n\nChoose the information needed for your next decision before collecting the list. Start with name, current role, company and profile URL. Include an email column when contact research needs it, filling it only from an address actually returned. Visible About text and career history can add context.\n\nThe template returns these groups of fields:\n\n| Information | Returned fields | What it helps you check | \n|---|---|---|\n| Identity and source | `full_name` ,`profile_url` | Whether the record belongs to the intended person | \n| Professional context | `headline` ,`location` ,`current_position` ,`current_company` | How the person describes their work and which current role is explicitly shown | \n| Background | `about` ,`experience` ,`education` | Relevant professional background available on the profile | \n| Additional details | `contact_info` | Visible Contact info; extract an email only if one is actually returned | \n| Collection outcome | `status` ,`status_detail` | Whether the profile was read or needs further attention | \n\nKeep the headline and current position separate. A headline can mention several interests or services; it is not necessarily a job title. Similarly, an empty education field can simply mean no education was visible.\n\nThis Bot starts with personal-profile URLs you provide. Finding new people, collecting company pages and converting Sales Navigator links require different workflows. It also does not infer hidden contact details from a person's name or employer.\n\nPut the source URLs in one column and keep that list unchanged. If you already have notes about each person, retain them in separate columns so you can compare those notes with the collected information later.\n\nUse standard personal-profile links containing `/in/`. Check that a copied link belongs to the intended person rather than a company or search-results page. For a list of distinct people, remove duplicate profiles in a working copy before collection. If repeated inputs matter to your project, retain them and account for them explicitly.\n\nThe template's result format preserves input order and repeated URLs, with one record per nonempty input, including error-status records. Check a completed batch against that expectation. Missing records are a coverage problem to investigate, not profiles to count as successfully collected.\n\nStart with a few profiles from your actual list. Choose people whose identity you can check, then decide which fields you need for the research. The first batch should help you establish whether the output meets those needs before you process the rest.\n\nThe [LinkedIn Profile Scraper](https://www.browseract.com/template/linkedin-profile-scraper-bot?co-from=blog-LinkedIn-Profile-Data-Research-DEV) explains both how to run the ready-made template and how to build a personal scraper. Use the template to check a small batch first. A personal Bot for the MCP route is a separate preparation step.\n\n`profile_urls`, using commas or semicolons between multiple URLs. Click When the task finishes, review each row's `status` and download the CSV or JSON. The [LinkedIn URL-to-CSV guide](https://www.browseract.com/blog/linkedin-profile-scraper?co-from=blog-LinkedIn-Profile-Data-Research-DEV) covers result handling in more detail.\n\nIf you need a personal Bot, follow the template's **How to Build a New Scraper Bot** section:\n\nFor the MCP route below, publish that personal Bot and keep its name or ID ready. The agent must read its current required inputs before submitting your list. Configure the Bot's own LinkedIn access; a session in another browser does not provide it.\n\nKeep account credentials out of `profile_urls`. If LinkedIn requests verification, complete the required account step before expecting usable profile data. For a task that ends in failure, resolve the reported problem before choosing to run again. A timeout alone does not prove execution stopped; check the existing task before starting another.\n\nWhen the agent retrieves the Bot's result, preserve the returned records or result file with their status fields. Keep that original output unchanged and put research notes in a working table.\n\nA BrowserAct run recorded on October 21, 2026 illustrates what to look for. It used an already authenticated Bot and six nonempty inputs. The examples below are historical snapshots, not current claims about the people or a forecast of what another account will see.\n\nOne successful record included the following values, selected from the full output:\n\n| Field | Recorded value | \n|---|---|\n| `profile_url` | `https://www.linkedin.com/in/williamhgates` | \n| `full_name` | Bill Gates | \n| `current_position` | Co-chair | \n| `current_company` | Gates Foundation | \n| `contact_info` | Website: gatesnot.es (Blog) | \n| `status` | `ok` | \n\nThe website stayed within that person's Contact info field. Work and education histories likewise remain within the person's own record, rather than becoming extra people in the CSV. This sample contained listed websites; it does not establish email or phone availability.\n\nThe complete batch contained both valid and invalid inputs:\n\n| Input order | Input or returned identity | Returned status | \n|---|---|---|\n| 1 | Bill Gates | `ok` | \n| 2 | Satya Nadella | `ok` | \n| 3 | LinkedIn company-page URL | `invalid_url` | \n| 4 | Malformed URL | `invalid_url` | \n| 5 | Nonexistent profile in that run | `not_found` | \n| 6 | Bill Gates, repeated input | `ok` | \n\nThe result was **six returned rows, three successful rows and two distinct successful profiles**. Counting every row as a researched contact would overstate the usable list. Removing the error rows before reconciliation would hide what still needed attention.\n\nFor your batch, first check that each nonempty input has a corresponding record. Then review successful records against the intended identities and the fields your research needs. Check important details on the source pages using the account that collected them. The sample above demonstrates output handling; it does not establish a general success rate or large-batch capacity.\n\nFor `invalid_url`, correct the input. For `not_found`, check the intended profile link. A missing optional field in an `ok` record should remain empty unless you obtain information from a source you can verify.\n\nA `partial` record needs review before use. For `login_required`, repair login and start a new run; for `access_restricted`, resolve access before continuing. Investigate `failed` using its explanation. These statuses describe different follow-up tasks, so keep the status and reason beside the record.\n\nAn empty Contact info field does not mean the person has no website, email or phone. It means the result contains no such detail. Avoid filling that gap with a guessed address.\n\nConnect your AI agent to BrowserAct through MCP and give it a small list for your prepared Bot. The agent can submit the URLs, retrieve the completed results and organize the records into a research table in the same conversation. Check that first result before processing the rest.\n\nIn an MCP-compatible client's settings, add the official BrowserAct server at `https://mcp.browseract.com/mcp/` and configure your general BrowserAct API Key in the client's local configuration or supported secure credential field. Follow the [BrowserAct MCP setup guide](https://docs.browseract.com/integrations/mcp?co-from=blog-LinkedIn-Profile-Data-Research-DEV) and confirm that BrowserAct's search and run tools are available in your agent before continuing. Keep the key outside the conversation.\n\nUse the personal Bot you built, checked and published above. The official MCP connection lets your agent find published Bots accessible to your API Key; connecting MCP does not sign a Bot into LinkedIn. Check that the Bot's required inputs and returned fields match the research task before using it.\n\nRead actual output before preparing the research table.\n\nProvide the personal-profile URLs you want to research and identify your published Bot. You can use the following request once the connection and Bot are ready:\n\n```\nUse BrowserAct MCP and my published LinkedIn Profile Scraper Bot to research\nthe personal-profile URLs I provide. Identify the Bot by the name or ID\nI specify; ask me to choose if several match. Read its current required\ninputs and ask me for missing values. If it is unavailable, explain and stop.\n\nRun it once for the supplied URLs. Keep the task reference and retrieve\nthe final task details and actual output before analyzing it. If submission\ntimes out or creation is uncertain, check for the original task before\nsubmitting again. Never create a duplicate while its state is unknown.\nReport failures and missing output. If login or access is missing, ask me\nto resolve it in BrowserAct. Do not treat a task reference as collected data.\n\nUsing only the returned records or result files you can read, prepare a\ntable of name, source URL, headline, current position, company and relevant\nbackground. Preserve collected values, contact_info, status and status_detail.\nExtract only email addresses explicitly present in contact_info into working\ncolumns email, email_source_url and email_status. Preserve their spelling\nand source profile URL; leave email empty when absent. Do not guess addresses\nor label them deliverable. Use observed, not_observed or review_required;\nflag unreadable records for review. Keep notes and follow-up questions separate.\n\nReport returned rows, successful rows and distinct successful profiles\nseparately. Flag duplicates, missing required details and collection\nproblems. Also count distinct profiles with observed emails separately.\nDo not infer hidden contact details. Keep unanswered questions\nvisible, and do not send messages or modify LinkedIn profiles.\n```\n\nThe agent's output should include the research table, a short coverage summary and a follow-up list. Names, roles and profile links come from the Bot's actual results; research notes and questions are added by the agent. Preserve that distinction so you can trace a note back to the collected source. If only a result file is available, the agent needs to read it before summarizing its contents.\n\nFor meeting preparation, suppose an employer in your earlier notes differs from `current_company`. Ask the agent to flag the difference and retain both values with the source URL. Check the profile's current roles and dates before updating your notes. Once confirmed, the change can inform a question about the person's new responsibilities. The same conversation can carry the collection result and this follow-up research.\n\nIf `contact_info` contains an explicit email address, ask the agent to copy it into the working table. Keep the original field and spelling. These are agent-created working columns, rather than extra fields promised by the Bot:\n\n| Working column | What to record | \n|---|---|\n| `email` | The returned address; empty when absent | \n| `email_source_url` | The corresponding LinkedIn profile URL | \n| `email_status` | `observed` ,`not_observed` , or`review_required` for ambiguous text or an uncertain record | \n\nAn `ok` profile record does not prove an email was found. Check the record before assigning `email_status`; collection errors stay visible. Report profiles with observed emails separately from successful profiles, and keep duplicates out of that count. Observation does not establish ownership or deliverability. Website-only Contact info, as in the historical example above, leaves `email` empty; the Bot does not visit that website to find an address.\n\nExpand to the remaining profiles after the sample meets your requirements. Keep a record of each submitted batch and compare it with the corresponding export. Process unresolved rows separately so a second attempt does not silently create duplicate contacts in your working table.\n\nTreat every export as a snapshot. Saving a CSV does not make it update when someone changes roles. Record the collection date in your research workspace and collect again when fresh information is needed.\n\nFor later research, give your connected agent the next profile list and use the same confirmed Bot. Recheck login when access changes, and keep the new results associated with their source batch and collection date.\n\nTo extract LinkedIn profile data for contact research in your AI agent, prepare your personal Bot and connect BrowserAct MCP. Begin with a small list, retrieve the actual output and check every input. Use the research table and follow-up questions for your meeting preparation, then reuse the same Bot for the next list.\n\nNo. You can use the template's Run form, or have an MCP-connected agent call your published Bot. Configure your own LinkedIn login in BrowserAct. The agent can then retrieve and organize the actual collection results.\n\nYes, this template requires your own LinkedIn login. For a template run, configure it in the Run flow; for the MCP route described here, configure your personal Bot's Website login settings. The information visible to that account determines what can be collected, and LinkedIn may require additional verification.\n\nThis Bot reads the personal-profile URLs you submit. It does not discover new profiles from a company, search query or job title. Prepare the source list before using this collection workflow.\n\nHave the agent copy an email only when it appears explicitly in returned `contact_info`, preserving the source profile URL. Email is not guaranteed: leave the working column empty when absent and flag uncertain records for review. The Bot does not infer hidden addresses, and an observed address has not been tested for deliverability.\n\nNo. Your BrowserAct API Key gives the agent access to BrowserAct tools and resources allowed for that key. The Bot needs its own LinkedIn login configured in BrowserAct. Resolve missing login or access there before asking the agent to run again.", "url": "https://wpnews.pro/news/extract-linkedin-profile-data-with-mcp-for-contact-research", "canonical_source": "https://dev.to/browser_act_e2505dbdf454a/extract-linkedin-profile-data-with-mcp-for-contact-research-ff9", "published_at": "2026-11-04 16:13:52+00:00", "updated_at": "2026-11-04 16:23:55.852393+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "ai-tools"], "entities": ["BrowserAct", "LinkedIn", "Model Context Protocol"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/extract-linkedin-profile-data-with-mcp-for-contact-research", "markdown": "https://wpnews.pro/news/extract-linkedin-profile-data-with-mcp-for-contact-research.md", "text": "https://wpnews.pro/news/extract-linkedin-profile-data-with-mcp-for-contact-research.txt", "jsonld": "https://wpnews.pro/news/extract-linkedin-profile-data-with-mcp-for-contact-research.jsonld"}}