<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Joseph Lim</title>
    <description>The latest articles on DEV Community by Joseph Lim (@josephlimtech).</description>
    <link>https://dev.to/josephlimtech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1079436%2F521185b0-c440-41ca-8576-3a7c40faa2c8.png</url>
      <title>DEV Community: Joseph Lim</title>
      <link>https://dev.to/josephlimtech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/josephlimtech"/>
    <language>en</language>
    <item>
      <title>The VC's Guide to Uncovering Stealth Startups</title>
      <dc:creator>Joseph Lim</dc:creator>
      <pubDate>Wed, 21 Jun 2023 08:51:26 +0000</pubDate>
      <link>https://dev.to/josephlimtech/the-vcs-guide-to-uncovering-stealth-startups-a0m</link>
      <guid>https://dev.to/josephlimtech/the-vcs-guide-to-uncovering-stealth-startups-a0m</guid>
      <description>&lt;p&gt;How can you identify a likely founder so that you can be the earliest to invest in their success?&lt;/p&gt;

&lt;p&gt;In this article, we'll answer this question and show you several specific queries you can plug into the &lt;a href="https://nubela.co/proxycurl/"&gt;Proxycurl&lt;/a&gt; &lt;a href="https://nubela.co/proxycurl/docs#search-api-person-search-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Search Endpoint&lt;/a&gt; to search for potential founders. Our intent is to demonstrate how you can add sourcing to your stack, rather than needing to have analysts do this manually.&lt;/p&gt;

&lt;h2&gt;
  
  
  General method
&lt;/h2&gt;

&lt;p&gt;We will make the assumption that founders tend to have strong demographic trends in certain categories, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attended certain universities.&lt;/li&gt;
&lt;li&gt;Worked at certain companies in the past.&lt;/li&gt;
&lt;li&gt;Held certain past job titles (such as were previously founders).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can leverage these trends along with a powerful &lt;a href="https://nubela.co/proxycurl/docs#search-api-person-search-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Search API&lt;/a&gt; like &lt;a href="https://nubela.co/proxycurl?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Proxycurl's&lt;/a&gt; to make bulk search queries that return rich lists of potential founders whose careers you can then monitor. If such a person moves to start a new company - possibly a &lt;a href="https://nubela.co/blog/stealth-startups-the-good-the-bad-where-to-find-them/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;stealth startup&lt;/a&gt; - you'll be aware of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Searching for employees of "Stealth Startup"
&lt;/h2&gt;

&lt;p&gt;A somewhat naive approach to the problem is to search for employees of "Stealth Startup." Fortunately, the naive approach is valid because LinkedIn (both helpfully and somewhat amusingly) recognizes &lt;a href="https://www.linkedin.com/company/stealth-startup-51/"&gt;"Stealth Startup" as a legitimate company&lt;/a&gt;. It has job listings and everything.&lt;/p&gt;

&lt;p&gt;There are a couple of specific variations on this name that have a lot of employees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/company/stealth-startup-51/"&gt;Stealth Startup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.linkedin.com/company/stealth-startupsssss/"&gt;Stealth Startup&lt;/a&gt; (again)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/company/stealth-mode-startup_2/"&gt;Stealth Mode Startup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/company/stealthstartup/"&gt;Stealth&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And several others. We're going to run a &lt;a href="https://nubela.co/proxycurl/docs#search-api-person-search-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Search Endpoint&lt;/a&gt; query with a regex on these, and we want to pick up a lot of results, but we don't want to grab too many false positives; for example &lt;a href="https://www.linkedin.com/company/stealthmanagement"&gt;Stealth Management Group LLC&lt;/a&gt; is not a stealth startup.&lt;/p&gt;

&lt;p&gt;For our regex, let's look for either an exact match of Stealth (&lt;code&gt;^Stealth$&lt;/code&gt;) or require that both &lt;code&gt;Stealth&lt;/code&gt; and &lt;code&gt;Startup&lt;/code&gt; be in the name, possibly with some string in between them. We can accomplish that with the following complete regex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_company_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(^Stealth$)|(.*Stealth.*Startup.*)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll leave case sensitivity on.&lt;/p&gt;

&lt;p&gt;It turns out that there are too many LinkedIn employees of stealth startups for this to be a restrictive enough condition to be searched on its own. That's exciting because it means we're working with a large sample size. So let's move on to the next part before we run any code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Segment potential founders based on their background
&lt;/h2&gt;

&lt;p&gt;We can accomplish this task in a few ways, and depending on how selective you want to be in your search, you can use these methods all at once or one at a time. Additionally, you can be more or less selective within each method; for example, when searching for graduates of particular universities, you may decide to look at only a single Ivy League school, whereas here, we'll include them all.&lt;/p&gt;

&lt;p&gt;We'll include one constant in every search here: Duration of tenure at the stealth startup. We're primarily interested in the first couple years of a stealth startup's existence, so we'll set &lt;code&gt;current_role_after&lt;/code&gt; to &lt;code&gt;2021-04-01&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filter by education background
&lt;/h3&gt;

&lt;p&gt;The first method we'll try is filtering for potential founders by their education background. You may have a school or set of schools in mind, but we'll take the set of Ivy League universities as an example. The regex for this is pretty straightforward, if a bit long:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;education_school_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^(Brown University|Columbia University|Cornell University|Dartmouth College|Harvard University|University of Pennsylvania|Princeton University|Yale University)$&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again, we want case sensitivity here, so we'll omit the optional &lt;code&gt;(?i)&lt;/code&gt; flag. And now, with two parameters specified, we are restricting our query enough that we can run some code! Here is an example working Python script. (As usual, with queries that return people, we won't print any results, but you can run it yourself if you like.)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PROXYCURL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;api_endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://nubela.co/proxycurl/api/search/person&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_company_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(^Stealth$)|(.*Stealth.*Startup.*)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_role_after&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2021-04-01&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;education_school_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^(Brown University|Columbia University|Cornell University|Dartmouth College|Harvard University|University of Pennsylvania|Princeton University|Yale University)$&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Filter by past experience
&lt;/h3&gt;

&lt;p&gt;After their education, people go to work, and you can use people's work histories to identify interesting people to keep track of. Historically, the acronym in tech has been "&lt;a href="https://nubela.co/blog/big-tech-faang-companies-stocks-what-is-it-how-to-invest/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;FAANG&lt;/a&gt;," and you might have your own particular set of companies you're interested in (for example, perhaps you want to include &lt;a href="https://www.linkedin.com/company/microsoft/"&gt;Microsoft&lt;/a&gt;). Still, we'll stick with the classic version for this demo.&lt;/p&gt;

&lt;p&gt;Now, there are two ways to approach this given that we have a list of companies to OR together:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use the &lt;code&gt;past_company_linkedin_profile_url&lt;/code&gt; parameter.

&lt;ul&gt;
&lt;li&gt;Pros: This field guarantees an exact match.&lt;/li&gt;
&lt;li&gt;Cons: It does not accept a regex value, so we can only search for one company at a time. Therefore, we have to perform multiple searches and combine the results.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Use the &lt;code&gt;past_company_name&lt;/code&gt; field.

&lt;ul&gt;
&lt;li&gt;Pros: This field accepts a regex value, so we can search for multiple companies at a time, using &lt;code&gt;^&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; with case sensitivity to ensure the name exact matches.&lt;/li&gt;
&lt;li&gt;Cons: While we can ensure that the name exact matches, we might pick up some false positives; for example, there are a couple other companies named Apple besides the FAANG &lt;a href="https://www.linkedin.com/company/apple/"&gt;Apple&lt;/a&gt; that we actually mean.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Which method should we choose? It depends on whether there's a reason &lt;strong&gt;not&lt;/strong&gt; to use method 1. Here's why you might want to avoid method 1:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple cases of needing to &lt;a href="https://nubela.co/blog/regular-expressions-the-proxycurl-search-api/#combining-fieldsusing-cross-field-or-efficiently?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;run multiple queries due to ORs with different fields&lt;/a&gt; is a reason to avoid method 1.&lt;/li&gt;
&lt;li&gt;Having lots of parameters in your query, so that it's more likely that a case of the "wrong Apple" showing up is more likely user input error than a wrong data point is a reason to avoid method 1.&lt;/li&gt;
&lt;li&gt;Running a very small sample size, so that the cost to run any query at all is high, is a reason to avoid method 1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given this analysis, I think option 2 is preferable for &lt;strong&gt;this particular use case&lt;/strong&gt; due to the second bullet point. However, this is not a be-all-end-all decision. Sometimes, you will certainly prefer option 1, and you should always consider which option is better for any decision point. When possible, make a query that returns a hundred or so results and step through them manually before committing.&lt;/p&gt;

&lt;p&gt;With that decided, we can run the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PROXYCURL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;api_endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://nubela.co/proxycurl/api/search/person&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_company_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(^Stealth$)|(.*Stealth.*Startup.*)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_role_after&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2021-04-01&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;past_company_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^(Facebook|Apple|Amazon|Netflix|Google)$&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice we're now discarding the segment from the previous section, but if we wanted to we could combine them and specify both an &lt;code&gt;education_school_name&lt;/code&gt; and a &lt;code&gt;past_company_name&lt;/code&gt; at the same time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Filter by past role title
&lt;/h3&gt;

&lt;p&gt;Finally, let's look for "serial entrepreneurs." We haven't been requiring that people list themselves as founders of their &lt;strong&gt;current&lt;/strong&gt; stealth startup, just that they work at one. The idea is that anyone currently working at a stealth startup is someone who you might want to keep an eye on - either for their current company or their next one. But we can select for people likely to go on to be a founder based on whether they've been one in the past.&lt;/p&gt;

&lt;p&gt;Here's the query, this time using the &lt;code&gt;(?i)&lt;/code&gt; flag in case someone was a "Co-founder":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PROXYCURL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;api_endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://nubela.co/proxycurl/api/search/person&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_company_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(^Stealth$)|(.*Stealth.*Startup.*)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_role_after&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2021-04-01&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;past_role_title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(?i)founder&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Finding founders who don't list "Stealth Startup"
&lt;/h2&gt;

&lt;p&gt;That was all great if the founder actually listed their current company as a recognizable regex matching &lt;code&gt;.*Stealth.*Startup.*&lt;/code&gt; somehow, but what if they're calling it something else entirely? For example, they could have written "Working on something cool" or "Can't wait to tell you guys."&lt;/p&gt;

&lt;p&gt;In the last section, we've profiled a few segments of likely founders (at least, this is the hypothesis). We can combine these - and, critically, &lt;strong&gt;remove&lt;/strong&gt; the ones we've already looked at by excluding the "Stealth Startup" regex we already looked at - to find candidates likely to be working at "interesting" companies at some point in their careers. The goal here is to curate a short list of people who are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Possibly working at an interesting company right now; or&lt;/li&gt;
&lt;li&gt;Potential founders of the next wave of startups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is one limitation here. &lt;a href="https://nubela.co/blog/introducing-search-api/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Proxycurl's Search API was released pretty recently&lt;/a&gt; as a version 1.0 product. Therefore, one field we might want to add to our search doesn't exist yet: &lt;code&gt;current_company_employee_count_max&lt;/code&gt;. If you're reading this post a while after its publication date, you may be able to disregard this caveat - check our docs for the &lt;a href="https://nubela.co/proxycurl/docs#search-api-person-search-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Search Endpoint&lt;/a&gt; to see if this parameter exists. It's on our to-do list. But &lt;em&gt;right now&lt;/em&gt; it's unavailable, and we'll have to make do without it.&lt;/p&gt;

&lt;p&gt;If we combine all the restrictions we looked at before, we only get nine results total. So we'll have to relax the conditions a bit. We'll only look at &lt;strong&gt;either&lt;/strong&gt; graduates of an Ivy League school &lt;strong&gt;or&lt;/strong&gt; alumni of a FAANG company (rather than both simultaneously).&lt;/p&gt;

&lt;p&gt;Because the code snippets are very similar, and the condition for the second was provided above, I'll only demonstrate the first here, and the second is left as an exercise to the reader.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PROXYCURL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;api_endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://nubela.co/proxycurl/api/search/person&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_company_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^(?!(^Stealth$)|(.*Stealth.*Startup.*))&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;current_role_after&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2021-04-01&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;education_school_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^(Brown University|Columbia University|Cornell University|Dartmouth College|Harvard University|University of Pennsylvania|Princeton University|Yale University)$&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;past_role_title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;(?i)founder&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What next?
&lt;/h2&gt;

&lt;p&gt;Now you have some candidates. That's a great first step, but if you source candidates and do nothing with this data, you still have nothing. So you will need to continue to monitor your list of candidates and eventually reach out to them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring
&lt;/h3&gt;

&lt;p&gt;You can monitor candidates using the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Profile Endpoint&lt;/a&gt;. If their company name changes from Stealth Startup to MyCompany BioLabs then you can reach out. Be sure to include the parameter &lt;code&gt;use_cache=if-recent&lt;/code&gt; so that you're always getting the most recent data, and you can get updated data once a month. Here's how a sample query might look with just a little bit of data processing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PROXYCURL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;api_endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://nubela.co/proxycurl/api/v2/linkedin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://www.linkedin.com/in/johnrmarty/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;use_cache&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;if-recent&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;current_companies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;company&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;experiences&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ends_at&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_companies&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;['Freedom Fund Real Estate', 'Mindset Reset Podcast', 'Project 1B', 'YouTube', 'YouTube']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what we did:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Query the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Profile Endpoint&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Extract the JSON result.&lt;/li&gt;
&lt;li&gt;Zero in on the "experiences" section.&lt;/li&gt;
&lt;li&gt;Select only the &lt;em&gt;current&lt;/em&gt; experiences.&lt;/li&gt;
&lt;li&gt;Select the company name for each of those current experiences.&lt;/li&gt;
&lt;li&gt;Print out a list of them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you were doing this as part of a pipeline, you'd have past data to compare to, and you'd probably want to keep track of some additional factors as well like date joined and maybe description, to check if this is likely a name change (e.g. from "Stealth Startup") or a brand-new venture. You'd also want to write this to a file or database rather than printing it.&lt;/p&gt;

&lt;p&gt;But as far as a demo goes, not so bad!&lt;/p&gt;

&lt;h3&gt;
  
  
  Contacting
&lt;/h3&gt;

&lt;p&gt;The final step in your pipeline is going to be contacting the prospect. We have another endpoint dedicated to this purpose, the &lt;a href="https://nubela.co/proxycurl/docs#contact-api-personal-email-lookup-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Personal Email Lookup Endpoint&lt;/a&gt;. Here's how you might use it to finally reach out to a lead you've been following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PROXYCURL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;api_endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://nubela.co/proxycurl/api/contact-api/personal-email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;linkedin_profile_url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://sg.linkedin.com/in/williamhgates&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email_validation&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that for the &lt;code&gt;email_validation&lt;/code&gt; parameter we used &lt;code&gt;include&lt;/code&gt;. This parameter requires the endpoint to perform email validation. If &lt;code&gt;exclude&lt;/code&gt; is used instead (or the parameter is omitted), there will be no email validation.&lt;/p&gt;

&lt;p&gt;The endpoint will return personal email addresses of your prospects, and your output will look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"emails"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"personal.email1@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"personal.email2@yahoo.com"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"invalid_emails"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"personal.email3.doesnotexist@gmail.com"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case you're wondering why we aren't using the &lt;a href="https://nubela.co/proxycurl/docs#contact-api-work-email-lookup-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Work Email Lookup Endpoint&lt;/a&gt; the answer is: Usually we would! But in this case we're looking at brand-new companies and/or stealth startups. These companies are unlikely to have domains added, much less work emails available. You're better off contacting via personal email in this particular situation.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;This article is long enough that it deserves a TL;DR section.&lt;/p&gt;

&lt;p&gt;If you're a VC or investment company, you may currently have many manual steps in your pipeline for identifying potential founders and contacting them.&lt;/p&gt;

&lt;p&gt;What if you could fully automate this pipeline? With Proxycurl APIs, you can! The &lt;a href="https://nubela.co/proxycurl/docs#search-api-person-search-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Search Endpoint&lt;/a&gt; is the core of the method. You will use this endpoint to search for current employees of stealth startups, filtered based on various criteria - we suggest some with code samples, but you may have your own that you'd prefer to use.&lt;/p&gt;

&lt;p&gt;After that, the rest of the pipeline can be accomplished using the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Person Profile Endpoint&lt;/a&gt; and the &lt;a href="https://nubela.co/proxycurl/docs#contact-api-personal-email-lookup-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;Personal Email Lookup Endpoint&lt;/a&gt;. Code samples for these are provided as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;How else might we use Search or even the other Proxycurl API endpoints to find interesting founders of startups? We have a few tricks left up our sleeves - but maybe we've also inspired you along the way! If you want to be featured in one of our blog posts, reach out at &lt;a href="mailto:hello@nubela.co"&gt;hello@nubela.co&lt;/a&gt;. Or if you'd rather keep your discovery to yourself, &lt;a href="https://nubela.co/proxycurl?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-vc_uncover_stealth_startups"&gt;register an account&lt;/a&gt; and make a credit top-up so you can get started &lt;strong&gt;right away&lt;/strong&gt; getting a leg up over the competition.&lt;/p&gt;

</description>
      <category>stealthstartup</category>
      <category>venturecapita</category>
      <category>datascience</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>1 in 3 Ex-Google Employees In $15 Billion Worth Of Startups [2023 Layoffs]</title>
      <dc:creator>Joseph Lim</dc:creator>
      <pubDate>Fri, 09 Jun 2023 08:11:03 +0000</pubDate>
      <link>https://dev.to/josephlimtech/1-in-3-ex-google-employees-in-15-billion-worth-of-startups-2023-layoffs-pb2</link>
      <guid>https://dev.to/josephlimtech/1-in-3-ex-google-employees-in-15-billion-worth-of-startups-2023-layoffs-pb2</guid>
      <description>&lt;p&gt;From a life of corporate toiling to startup stardom, droves of ex-Googlers have turned their talents to the startup world. The result? A collective $15 Billion worth of venture-funded startups now call ex-Googlers their own.&lt;/p&gt;

&lt;p&gt;Who are these ex-Googlers exactly? Which geographical locations are they from? What kind of industries did the other 60+% go to? Join us as we uncover the secrets of &lt;em&gt;life-beyond-layoff&lt;/em&gt; for thousands of these former Google employees, and see if we can unearth more insights using cold, hard &lt;em&gt;data&lt;/em&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At Proxycurl, we are in the data enrichment tech business where we enrich people and company profiles with structured data including people data, company/school data, contact &amp;amp; jobs data. Clients that use our APIs &amp;amp; databases include VCs, banks, startups, sales organizations, HRs &amp;amp; more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We hope you will find our insights useful. But that’s not all - as a special treat, we're offering a never-seen-before giveaway of the entire dataset of ex-Googlers scraped using our products. And this is just the beginning - we have a series of content (and giveaways) coming up that cover the other affected big tech companies, including Meta, Netflix, and Amazon. So be sure to follow us for more insider insights, expert analysis, and the latest news from the tech industry.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Methodology&lt;/li&gt;
&lt;li&gt;
Part I: People Profiles Of 2,762 Ex-Google Employees - Who Are They?

&lt;ul&gt;
&lt;li&gt;Every 2 Laid-Off Googlers, &amp;gt;1 Is From The States (56%)&lt;/li&gt;
&lt;li&gt;Software Engineers Were Most Affected: 30% Of All Laid-Off Employees&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
Part II: 747 Ex-Googlers Found New Jobs - At Which Companies?

&lt;ul&gt;
&lt;li&gt;747 Ex-Googlers Landed New Jobs / Founded New Companies&lt;/li&gt;
&lt;li&gt;58% Of New Companies Are In Technology &amp;amp; IT, Includes Software Development&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
Part III: Billions Worth Of Impact Made By Just One Third Of Ex-Googlers

&lt;ul&gt;
&lt;li&gt;One-Third (or 205) Ex-Googlers Joined Startups&lt;/li&gt;
&lt;li&gt;Equal Proportion Of Startups In The Same Industries As All-Company Universe - 55% In Technology &amp;amp; IT&lt;/li&gt;
&lt;li&gt;Close To 70% Of Ventures Are In Seed &amp;amp; Series A, B, C Funding Rounds&lt;/li&gt;
&lt;li&gt;Total Funding Ranges From $50k In Pre-Seed To $3.5 Billion In Series H&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Want The Thousands Of Raw Data Of Ex-Google Employees?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Methodology
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;At Proxycurl, we enrich only &lt;a href="https://nubela.co/blog/what-is-the-difference-between-linkedin-public-profiles-vs-linkedin-private-profiles-with-python-code-samples/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-ex_googlers_layoff"&gt;public LinkedIn profiles&lt;/a&gt; &lt;em&gt;(public profiles can be scraped with &lt;a href="https://nubela.co/blog/is-linkedin-scraping-legal/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-ex_googlers_layoff"&gt;legal precedence&lt;/a&gt;)&lt;/em&gt; &amp;amp; from this we identified &lt;code&gt;117,981&lt;/code&gt; Google employees. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There were however &lt;code&gt;7,872&lt;/code&gt; profiles that returned 404 error with unbeknowst reasons: invalid profiles, private LinkedIn profiles, changed usernames, deleted LinkedIn profiles etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Out of which, &lt;code&gt;2,762&lt;/code&gt; people indicated a change of employment in the &lt;code&gt;last 4 months&lt;/code&gt; (from the date of writing i.e. 14 February, yes Valentines’ Day) - aka &lt;strong&gt;ex-Googlers&lt;/strong&gt; that got laid off. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why only &lt;code&gt;2,762&lt;/code&gt; and not the &lt;a href="https://blog.google/inside-google/message-ceo/january-update/"&gt;12,000 as announced by CEO Sundar Pichai&lt;/a&gt;? A main reason could be they have yet to update their LinkedIn profiles. Also, the announced 12,000 could include blue-collar workforce who are not on LinkedIn. Proxycurl dataset is also focused on English-speaking regions, thus would not cover extensively some regions such as India.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hereon, the rest of our analysis will focus on the remaining valid profiles. Note: even then some data fields might be absent if the individuals and companies did not fill in the particular fields in LinkedIn, thus certain parts of the analysis might leave out these profiles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;The 4 main Proxycurl products that we used for this piece are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using the &lt;strong&gt;&lt;a href="https://nubela.co/proxycurl/linkedin/list-employee?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-ex_googlers_layoff"&gt;Employee Listing API Endpoint&lt;/a&gt;&lt;/strong&gt;, we fetched a list of all past &amp;amp; present employees of Google.&lt;/li&gt;
&lt;li&gt; From the list of “Present employees,” we used the &lt;strong&gt;&lt;a href="https://nubela.co/proxycurl/linkedin?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-ex_googlers_layoff"&gt;People Profile API Endpoint&lt;/a&gt;&lt;/strong&gt; to refresh their profiles to identify who have landed a new job.&lt;/li&gt;
&lt;li&gt;Using the &lt;strong&gt;&lt;a href="https://nubela.co/proxycurl/linkedin/company?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-ex_googlers_layoff"&gt;Company Profile API Endpoint&lt;/a&gt;&lt;/strong&gt; we then update the profiles of these new companies they joined to get more information.&lt;/li&gt;
&lt;li&gt;Our &lt;strong&gt;&lt;a href="https://nubela.co/proxycurl/linkdb?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-ex_googlers_layoff"&gt;LinkDB LinkedIn Database&lt;/a&gt;&lt;/strong&gt; was also used to identify historical data relating to their time in Google. &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let’s dive into the data insight proper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part I: People Profiles Of 2,762 Ex-Google Employees - Who Are They? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Who are they? We first take a look at how the layoffs have impacted them, and who it has impacted, namely which countries were most impacted, and which roles?&lt;/p&gt;

&lt;h3&gt;
  
  
  Every 2 Laid-Off Googlers, &amp;gt;1 Is From The States (56%)
&lt;/h3&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Top Impacted Countries&lt;/strong&gt;&lt;br&gt;
Naturally, most of the impacted Google employees were based in the States as Google employed the majority of its 117,981 employees from the States and the States being its HQ. Therefore the US herself saw 1,158 &lt;em&gt;(or 56.4%)&lt;/em&gt; Googlers leaving the company. &lt;/p&gt;

&lt;p&gt;The next countries did not even come close - with United Kingdom in second at only 3.3% of affected Google employees, Ireland with 2.8%, India and Canada with 2.3% and 1.7% respectively. These 4 countries only make up the next 10% of ex-Googlers after the US' 56.4%. &lt;/p&gt;

&lt;p&gt;Notably Ireland, and Singapore which came next in 6th made the top despite their small country population &lt;em&gt;(about 5 million respectively)&lt;/em&gt;, a testament to Google’s human resource investment there. Or de-investment post-layoffs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KGm08m6C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/1.1---countries-of-ex-googlers.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KGm08m6C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/1.1---countries-of-ex-googlers.png" alt="Countries where ex-Google employees were based at" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Top Impacted Region&lt;/strong&gt;&lt;br&gt;
Region wise - discounting North America due to the US’s heavy weightage (and Canada topping 5th) - Europe saw 12% of ex-Googlers let go and Asia with 5%, rounding up the 2nd &amp;amp; 3rd most regions with ex-Googlers globally.&lt;/p&gt;

&lt;p&gt;Below, the US is excluded from the chart above to see the impact on other countries. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bUySYRRX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/1.2---countries-of-ex-googlers-no-US.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bUySYRRX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/1.2---countries-of-ex-googlers-no-US.png" alt="Countries where ex-Google employees were based at excluding US" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact On US States&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Note: 44% of the 1,558 US profiles did not return &lt;code&gt;states&lt;/code&gt; data, so the analysis will be based only on the remaining 56%.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With that, California being Google global HQ had a whooping 30% of total ex-Googlers &lt;em&gt;(out of the total universe of 2,762)&lt;/em&gt;, that is quite a lot of people laid off from a single location. The next 3 states are New York at 8.8%, Washington 5.5%, Texas 3.3% &lt;em&gt;(coincidentally they are &lt;a href="https://en.wikipedia.org/wiki/Palindromic_number#:~:text=The%20first%2030%20palindromic%20numbers,sequence%20A002113%20in%20the%20OEIS"&gt;palindromic decimal&lt;/a&gt;)&lt;/em&gt;. These 3 states themselves have more Googlers laid off then each country that came after the US &lt;em&gt;(UK, Ireland, India)&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Food for thought: with US having most of the laid-off Google employees, this inadvertently led to a significant number of them joining the US's huge startup scene - with &lt;a href="https://news.crunchbase.com/startups/countries-most-startup-investment/"&gt;the country having by far the highest startup investment globally&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Software Engineers Were Most Affected: 30% Of All Laid-Off Employees &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Casual observers often remarked that the most affected role is the software engineers. Well, we found that it is indeed true. Out of all 2,762 ex-Google employees, 30.6% &lt;em&gt;(or 844)&lt;/em&gt; people were ex-Google software engineers. &lt;/p&gt;

&lt;p&gt;As the title field in LinkedIn is a free text input, there are more than 1,500 distinct roles that we observed from our data collected. We then used ChatGPT to clean up and categorize all 2,000+ roles into 9 main categories. Finally we did a quick manual comb-through to correct any discrepancy.&lt;/p&gt;

&lt;p&gt;Coming in 2nd to 5th after SWEs are these categories: sales, recruitment, product design, and project management, each with around 11-12% of ex-Googlers each. These few categories combined with software engineers would have amounted to 77% of total roles laid off in Google.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XL78Og64--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/Screenshot-2023-02-20-at-3.42.22-PM.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XL78Og64--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/Screenshot-2023-02-20-at-3.42.22-PM.png" alt="Affected ex-Google Employees by their Roles" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Food for thought: Being part of Google and now laid off, was that what spurred these SWEs to bring their game to the startup scene for a change?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Part II: 747 Ex-Googlers Found New Jobs - At Which Companies? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Now, what’s next for these ex-Googlers? Let’s take a look at where they have headed next, have they all found the next destination, some have founded their own startups - nothing unusual of course from these ex-Googlers.&lt;/p&gt;

&lt;h3&gt;
  
  
  747 Ex-Googlers Landed New Jobs / Founded New Companies &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;747 out of the 2,762 laid-off Googlers have since updated their profiles to indicate a change of employment status in the last 4 months since November 2022. &lt;/p&gt;

&lt;p&gt;There could of course still be many that have found new jobs, which they might not yet update their profiles - a common practice on LinkedIn. Due to reasons such as: they simply do not need to do so upon securing a new job, they forgot, they wanted to keep their new movement private for a few months, and so on.&lt;/p&gt;

&lt;h3&gt;
  
  
  58% Of New Companies Are In Technology &amp;amp; IT, Includes Software Development &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;From our data collected, there were a total of 103 distinct industries identified, from 707 valid company profiles out of 747 ex-Googlers who indicated new employment.&lt;/p&gt;

&lt;p&gt;With these 103 distinct industries, we then ask our beloved ChatGPT again to categorize them into a few main categories. It did a pretty good job - discrepancies in some smaller categories aside which we needed to manually clean up. &lt;/p&gt;

&lt;p&gt;A total of 56.7% &lt;em&gt;(or 401)&lt;/em&gt; companies that ex-Googlers joined are in the ”Technology &amp;amp; IT” industry, out of which 65.6% &lt;em&gt;(or 263)&lt;/em&gt; are in “Software Development.” This is well expected because of the people being from Google. If we were to look at the entire pie of 707 new companies, “Software Development” alone takes up 37%.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Food for thought: among these 401 "Technology &amp;amp; IT" companies are startups collectively worth more than $15 Billion that ex-Googlers now join.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HtuikXB0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/2.1-industries-ratio-of-all-companies-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HtuikXB0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/2.1-industries-ratio-of-all-companies-1.png" alt="Ratio of industries the new companies that ex-Google employees joined&amp;lt;br&amp;gt;
" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coming in second is the category of “Business &amp;amp; Professional Services“ at 24.2% of total &lt;em&gt;(or 171 companies)&lt;/em&gt;. This category includes - quoting the top few industries - financial services, business consulting, advertising services and recruitment.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Sample Of Companies That Hired Ex-Googlers
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Company&lt;/th&gt;
&lt;th&gt;No. of Ex-Googlers Hired&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stealth Startup&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/moloco/"&gt;Moloco&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/arta-finance"&gt;Arta Finance&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://uk.linkedin.com/company/unlikely-ai"&gt;Unlikely AI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/agilerank"&gt;AgileRank&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://il.linkedin.com/company/vast-data"&gt;VAST Data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/samsara"&gt;Samsara&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/optimalex"&gt;Optimalex&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ro.linkedin.com/company/yonder"&gt;Yonder&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/flock-safety/"&gt;Flock Safety&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://fr.linkedin.com/company/tftp"&gt;Time for the Planet&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ie.linkedin.com/company/kitman-labs"&gt;Kitman Labs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://uk.linkedin.com/company/isomorphic-labs"&gt;Isomorphic Labs&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;And 694 other companies. &lt;a href="//mailto:hello@nubela.co"&gt;Email us&lt;/a&gt; for the exhaustive Google Layoff Dataset.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Part III: Billions Worth Of Impact Made By Just One Third Of Ex-Googlers &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;In this section, we want to understand how the departure of this many ex-Googlers impacts the startup ecosystem. What kind of industries and startups welcomed most of these ex-Googlers?&lt;br&gt;
Methodology: we identified &lt;code&gt;startups&lt;/code&gt; as companies that fulfill &lt;strong&gt;any one&lt;/strong&gt; of these parameters:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Received funding&lt;/li&gt;
&lt;li&gt;&amp;lt;=50 employees&lt;/li&gt;
&lt;li&gt;Ex-Googlers joining as "founder" or "co-founder"&lt;/li&gt;
&lt;li&gt;Incorporated from 2020 onwards&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  One-Third &lt;em&gt;(or 205)&lt;/em&gt; Ex-Googlers Joined Startups &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;With the parameters above, there are &lt;strong&gt;&lt;code&gt;205&lt;/code&gt; startups/ventures&lt;/strong&gt; identified. With further breakdown, the list below shows the proportion of companies that fulfill each of the parameters, with a deep dive for the fundings information in the next section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--myVFb4KR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.0-Startups-consist-of-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--myVFb4KR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.0-Startups-consist-of-1.png" alt="Make up of startups that ex-Googlers join" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;73&lt;/code&gt; Companies Are Funded&lt;/strong&gt;: these companies indicated their latest funding rounds being either of these: 

&lt;ul&gt;
&lt;li&gt;Pre-seed, seed, series A to H and convertible note.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;121&lt;/code&gt; Companies Have &amp;lt;=50 Employees&lt;/strong&gt;, these are the breakdown: 

&lt;ul&gt;
&lt;li&gt;82 companies indicated 50 employees, &lt;/li&gt;
&lt;li&gt;37 companies have 10 employees,&lt;/li&gt;
&lt;li&gt;2 companies have 1 sole employee.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;43&lt;/code&gt; Companies Have Ex-Googlers As Founder/Co-Founder&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;14 are founders, &lt;/li&gt;
&lt;li&gt;23 co-founders, consisting of CEOs, CTOs &amp;amp; CROs,&lt;/li&gt;
&lt;li&gt;6 founding members (engineers, designers etc). &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;41&lt;/code&gt; Are Incorporated From 2020&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Of those 13 companies founded in 2020, 3 have reached 200 employees, 2 have 500 employees. &lt;/li&gt;
&lt;li&gt;Those 18 founded in 2021, 3 has 200 employees, 1 has 500. &lt;/li&gt;
&lt;li&gt;For the 10 founded last year (2022), half have 10 employees and the other half have 50.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Startups Recently Founded By Googlers Who Were Recently Laid Off
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Company&lt;/th&gt;
&lt;th&gt;No. of Ex-Googler Founders&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stealth Startup&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/vizcomco"&gt;Vizcom&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/techshackltd/"&gt;TechShack&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/convaitech"&gt;Stealth Conversational AI Startup&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://ca.linkedin.com/company/plato-io"&gt;Plato&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.linkedin.com/company/pigeon-documents"&gt;Pigeon (YC W23)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;And 13 other startups. &lt;a href="//mailto:hello@nubela.co"&gt;Email us&lt;/a&gt; for the exhaustive Google Layoff Dataset.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Equal Proportion Of Startups In The Same Industries As All-Company Universe - 55% In Technology &amp;amp; IT &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Similar to the total universe of 747 companies ex-Googlers joined, companies in the "Technology &amp;amp; IT" category take up also 54.5% &lt;em&gt;(103)&lt;/em&gt; of the 205 startups. Out of which, "Software Development" takes up a slightly higher percentage than total company, at 43% &lt;em&gt;(or 81)&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Ranked second is also the "Business &amp;amp; Professional Services" category, at a slightly higher of 31.2% out of total startups, and with the same few top industries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pMA66Kms--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.2-industry-ratio-of-startups-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pMA66Kms--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.2-industry-ratio-of-startups-3.png" alt="Ratio of industries the startups that ex-Google employees joined" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Close To 70% Of Ventures Are In &lt;em&gt;Seed&lt;/em&gt; &amp;amp; &lt;em&gt;Series A, B, C&lt;/em&gt; Funding Rounds &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Majority of latest funding rounds indicated in these company profiles are in the earlier stages, with the later stages tapering off to 6 and 1 companies.&lt;/p&gt;

&lt;p&gt;These earlier stages accounted for more than 68.9% of the funding rounds indicated. &lt;/p&gt;

&lt;p&gt;On the other end of the spectrum, pre-seed has 3 companies stating that as their last funding round. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OeIhSQkh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.3-funding-rounds-of-startups-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OeIhSQkh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.3-funding-rounds-of-startups-4.png" alt="Funding Rounds of Startups that Ex-Google Employees Joined" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Total Funding Ranges From $50k In Pre-Seed To $3.5 Billion In Series H &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Note: the chart below has funding amount rounded to the nearest $100,000 for easy reading.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The pre-seed round saw the lowest 2 funding amounts of $50k and $75k. Next lowest is $380k in Seed round, and from there on the funding amounts increase gradually in the subsequent rounds. Series A started from $4.9 Million and capped at slightly below $100 Million.&lt;/p&gt;

&lt;p&gt;Series B &amp;amp; C both have a range of below &amp;amp; above $100 Million. Series D &amp;amp; E however have all $100 Million and above. In Series F one company first crossed the billion-funding amount at $2 Billion. For Series G, data wasn’t available in LinkedIn for our scraping.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Total fundings from all companies amounted to &lt;strong&gt;$14,956,105,000&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XQyesUZp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.4-funding-range-received-by-startups-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XQyesUZp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/02/3.4-funding-range-received-by-startups-2.png" alt="Range of Min &amp;amp; Max of Fundings Received by Startups Of ex-Google Employees" width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Want The Thousands Of Raw Data Of Ex-Google Employees For Your Own Applications? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;There you go! Some analysis of ex-Googlers’ latest movements, as of the time of data collection and writing. Of course our data analysis processes might not be top notch and while we did not commit to achieving that, our commitment was towards the quality of data that we scraped - being &lt;a href="https://nubela.co/blog/how-fresh-are-profiles-returned-by-proxycurl-api/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-ex_googlers_layoff"&gt;fresh as we scraped the data live for this analysis&lt;/a&gt;, accurate, and fully-legal.&lt;/p&gt;

&lt;p&gt;It is certainly unfortunate that so many people’s roles were affected in these headline-layoffs. There are certainly many who capitalized on opportunities to do something they’ve always liked, founded companies and so on.&lt;/p&gt;

&lt;p&gt;Nevertheless if you like what we have put together, we have something tasty for you:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Free data pack with more than USD $11,300++ worth of structured data of ALL ex-Googlers that we talked all about in this piece.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This valuable data pack is available only to VC firms and people in the media industry &lt;em&gt;(i.e. journalists, editors, publishers etc)&lt;/em&gt;. What you need to do is to just drop us an email at &lt;a href="//mailto:hello@nubela.co"&gt;hello@nubela.co&lt;/a&gt; and we will get in touch. Get a copy yourself and you can deep dive into the data even more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sendy.nubela.co/subscription?f=YI47f4TeTuhdFoSrZ763iI5gnFtkM1892fYkWD4WQBr28jBkqkCoOcaUummVfjrHTdJMswah3Df7630TYW46gSDXzPUw"&gt;Subscribe to our newsletter&lt;/a&gt; or &lt;a href="https://twitter.com/proxycurl"&gt;Twitter&lt;/a&gt; to get notified when the next in this series is out: &lt;strong&gt;Amazon *(with Meta, Netflix and more coming up next)&lt;/strong&gt;*. Cheers.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>webscraping</category>
      <category>google</category>
      <category>layoffs</category>
    </item>
    <item>
      <title>Best Tech Affiliate Program (2023) – Refer Once &amp; Earn for 2 Years</title>
      <dc:creator>Joseph Lim</dc:creator>
      <pubDate>Fri, 19 May 2023 04:06:14 +0000</pubDate>
      <link>https://dev.to/josephlimtech/best-tech-affiliate-program-2023-refer-once-earn-for-2-years-1de8</link>
      <guid>https://dev.to/josephlimtech/best-tech-affiliate-program-2023-refer-once-earn-for-2-years-1de8</guid>
      <description>&lt;p&gt;Have you heard of an affiliate program where you can continue to earn from each referral for two years after they sign up? Well, you've come to the right place: We offer such a program here at Proxycurl! And our commission is a lucrative 10% of your referrals' spend throughout these two years.&lt;/p&gt;

&lt;p&gt;If you have an established platform - or multiple platforms - with a tech audience, keep reading to learn more about what Proxycurl is and the structure of our affiliate program.&lt;/p&gt;

&lt;h2&gt;
  
  
  Know what you’ll be promoting - what is Proxycurl?
&lt;/h2&gt;

&lt;p&gt;Before we expand further on the affiliate program, let us tell you more about Proxycurl and our products.&lt;/p&gt;

&lt;p&gt;At Proxycurl, we offer two primary products:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nubela.co/proxycurl/docs?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;Proxycurl APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nubela.co/proxycurl/linkdb?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;LinkDB LinkedIn database&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our suite of API endpoints enriches &lt;a href="https://nubela.co/proxycurl/linkedin?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;person&lt;/a&gt; and &lt;a href="https://nubela.co/proxycurl/linkedin/company?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;company&lt;/a&gt; profiles with structured data such as emails and phone numbers, job and salary info, etc. Meanwhile, our LinkDB product is an exhaustive dataset of more than 470 million LinkedIn profiles globally. We have helped thousands of businesses of all sizes and from all industries globally, and we're sure that our products will interest your audience too.&lt;/p&gt;

&lt;p&gt;Feel free to check out our website for more information about our company and products, especially our &lt;a href="https://nubela.co/blog?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;blog&lt;/a&gt; and &lt;a href="https://nubela.co/blog/tag/faq/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;FAQ pages&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is best suited for our affiliate program?
&lt;/h2&gt;

&lt;p&gt;Our affiliate program is ideal for you if &lt;strong&gt;you&lt;/strong&gt; are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Someone with an established tech audience,&lt;/li&gt;
&lt;li&gt;Building up your network, or&lt;/li&gt;
&lt;li&gt;Intending to venture into the tech industry.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This profile includes tech bloggers, writers, tech influencers, and so on.&lt;/p&gt;

&lt;p&gt;Furthermore, our affiliate program is ideal for your if &lt;strong&gt;your audience&lt;/strong&gt; contains software endineers or data engineers, especially at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nubela.co/proxycurl/solutions/accelerate-growth?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;Growth-stage startups&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nubela.co/proxycurl/solutions/alternative-data-for-investment-firms?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;VCs and investment firms&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nubela.co/proxycurl/solutions/hr-tech?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;HR Tech companies&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nubela.co/proxycurl/solutions/sales-marketing-automation-api?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;Sales and automation companies&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, if you have someone in mind who you think might have great use case in mind for our product, don't hesitate to pitch them directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Superb commission structure and referral period
&lt;/h2&gt;

&lt;p&gt;We understand that the key to any affiliate program is, well, you. We offer a fixed 10% commission on all purchases made by your referrals for an impressive period of two years. This means that you'll continue to earn commissions on every purchase made by any referral for the first two years of their initial sign-up.&lt;/p&gt;

&lt;p&gt;In addition, tracking your commission is easy. All you need to do is share your unique UTM links with your audience, and any purchase made by your referrals will be immediately reflected in a dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join Proxycurl Affiliates &amp;amp; start earning commissions
&lt;/h2&gt;

&lt;p&gt;If you like what you've heard, join Proxycurl Affiliates right now and start earning lucrative commissions today. With our powerful suite of products, highly satisfied user base, and an incredible commission structure, you'll have no trouble earning on our platform.&lt;/p&gt;

&lt;p&gt;If you have any questions, email us at &lt;a href="mailto:marketing@nubela.co"&gt;marketing@nubela.co&lt;/a&gt; If not, visit our &lt;strong&gt;&lt;a href="https://nubela.co/proxycurl/affiliate?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-affiliate_program"&gt;dedicated affiliate page&lt;/a&gt;&lt;/strong&gt; right now to sign up and start earning!&lt;/p&gt;

</description>
      <category>affiliate</category>
      <category>api</category>
      <category>database</category>
      <category>scraper</category>
    </item>
    <item>
      <title>How to Build a LinkedIn Data Scraper</title>
      <dc:creator>Joseph Lim</dc:creator>
      <pubDate>Tue, 09 May 2023 08:58:09 +0000</pubDate>
      <link>https://dev.to/josephlimtech/how-to-build-a-linkedin-data-scraper-2a2c</link>
      <guid>https://dev.to/josephlimtech/how-to-build-a-linkedin-data-scraper-2a2c</guid>
      <description>&lt;p&gt;So you want to scrape LinkedIn for data. Maybe you're a dev looking to automate your next remote job search; maybe you're a hiring manager trying to find the perfect candidate; or maybe you're an investor trying to figure out who exactly is joining which stealth ventures. The problem, of course, is that LinkedIn doesn't have a public API, and &lt;a href="https://nubela.co/blog/tutorial-how-to-build-linkedin-automation-tools-with-python-with-a-code-example/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;building your own scraper from scratch is really hard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In this guide, we'll go over the DIY solution in case you want to try it yourself despite the difficulty. And after that, I'll walk you through the &lt;a href="https://nubela.co/proxycurl?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Proxycurl API&lt;/a&gt;, a SaaS product built precisely to solve the problem you have right now, using Postman, Python, and Javascript. If you're here for an easy solution, feel free to skip to the "answer."&lt;/p&gt;

&lt;p&gt;Here's what we'll cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What's required to scrape LinkedIn yourself? Understanding private vs public profiles, scraping HTML, bypassing the authwall, and more.&lt;/li&gt;
&lt;li&gt;What does the Proxycurl API accept, and what do you get?&lt;/li&gt;
&lt;li&gt;How to query the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Person Profile Endpoint&lt;/a&gt; in Postman, Python, and Javascript.&lt;/li&gt;
&lt;li&gt;A measure of reliability: We'll query the Person Profile Endpoint 100 times and look at the status codes.
## How would you build a LinkedIn scraper in a vacuum?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, we must understand &lt;a href="https://nubela.co/blog/what-is-the-difference-between-linkedin-public-profiles-vs-linkedin-private-profiles-with-python-code-samples/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;the difference between public and private profiles&lt;/a&gt; on LinkedIn. In a nutshell, it's only safe and legal to scrape public profiles. Companies that scrape private profiles &lt;a href="https://nubela.co/blog/what-you-should-know-now-that-mantheos-a-linkedin-scraping-service-is-sued-by-linkedin/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;have faced lawsuits from LinkedIn&lt;/a&gt;. On the other hand, public profiles &lt;a href="https://nubela.co/blog/is-linkedin-scraping-legal/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;are legal to scrape&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So if we limit ourselves to private profiles we will be okay. But how do we go about actually scraping a profile?&lt;/p&gt;

&lt;h3&gt;
  
  
  Scraping one field from an example profile
&lt;/h3&gt;

&lt;p&gt;For this article, we saved an example profile locally and wrote a simple scraper to parse out one of the easier fields to retrieve as JSON data: A person's languages. Note that this script is doing nothing to connect to LinkedIn; all it's doing is using &lt;code&gt;BeautifulSoup&lt;/code&gt; to scrape one field. Here's the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_languages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;raw_html&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;languages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="n"&gt;language_section&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;raw_html&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;section&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data-section&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;languages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;language_section&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;languages&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;language&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;language_section&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;li&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;languages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;language&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_text&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;languages&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depending on your level of experience with web scraping, this may seem like a lot of work for just a single field, or it may not seem too bad. Either way, keep in mind that we also have to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do this for every single field we're interested in.&lt;/li&gt;
&lt;li&gt;Keep up with a moving target. Any time LinkedIn rearranges any of its HTML, we'll have to adjust our parser, sometimes significantly, and sometimes all at once.&lt;/li&gt;
&lt;li&gt;Support internationalization. For example, Czech-language profiles need a dedicated parser.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Authwall: What is it and how do we deal with it?
&lt;/h3&gt;

&lt;p&gt;Go into incognito mode and try browsing some LinkedIn profiles. Go on, I'll wait. Chances are, within one or two clicks you arrived at something that looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Esqi6m5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/authwall-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Esqi6m5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/authwall-1.png" alt="LinkedIn's &amp;quot;authwall&amp;quot; blocks you from seeing most profiles while you're logged out." width="483" height="586"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure: LinkedIn's "authwall" blocks you from seeing most profiles while you're logged out.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's the "authwall." Even if a LinkedIn profile is public, you still need to be logged in if you want to see it. We can access it in code like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;has_authwall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;html.parser&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;script&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/authwall?trk=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_text&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Note that we're still using &lt;code&gt;BeautifulSoup&lt;/code&gt; here instead of raw searching for the string in case someone decided to troll us by including the raw string &lt;code&gt;/authwall?trk=&lt;/code&gt; in their profile. Hey, it could happen.)&lt;/p&gt;

&lt;p&gt;Although this is how to &lt;strong&gt;detect&lt;/strong&gt; the authwall, actually bypassing it is a lot more complicated and out of the scope of this article; we aren't going to share how Proxycurl does it (sorry!).&lt;/p&gt;

&lt;h2&gt;
  
  
  Scraping LinkedIn yourself is hard, but scraping LinkedIn doesn't have to be
&lt;/h2&gt;

&lt;p&gt;As you may be concluding, it's really hard to DIY a LinkedIn scraper. That's why &lt;a href="https://nubela.co/proxycurl?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Proxycurl&lt;/a&gt; exists. We take care of everything for you, and you can take advantage of any one of our &lt;a href="https://nubela.co/proxycurl/docs#explain-it-to-me-like-i-39-m-5?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;many endpoints&lt;/a&gt; to retrieve all the data you could possibly want in JSON format.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do I put into the Proxycurl API, and what do I get out?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What you have
&lt;/h3&gt;

&lt;p&gt;Proxycurl is a paid API, and you need to authenticate every request with a bearer token (your API key). After you've &lt;a href="https://nubela.co/proxycurl?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;signed up for a Proxycurl account&lt;/a&gt;, you can retrieve your API key from the &lt;a href="https://nubela.co/proxycurl/dashboard/proxycurl-api/api-key/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;dashboard&lt;/a&gt;. Signing up gives you 10 credits, and you'll get another 5 credits upon your first successful query of the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-lookup-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Person Lookup API Endpoint&lt;/a&gt;, so you can experiment a bit.&lt;/p&gt;

&lt;p&gt;If you've been paying close attention, you might have noticed I've now said two slightly different things - I mentioned the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Person Profile Endpoint&lt;/a&gt; in the introduction, and now here's the Person Lookup Endpoint. What's that all about? Yes, these are different endpoints, and yes, they give you different things. The Proxycurl docs have an &lt;a href="https://nubela.co/proxycurl/docs#explain-it-to-me-like-i-39-m-5?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;ELI5 listing all of our endpoints&lt;/a&gt; that gives you a what-you-have-what-you-get directory so you can figure out which one to use. And you thought address books were outdated!&lt;/p&gt;

&lt;p&gt;For now, though, let's concern ourselves with the Person Profile Endpoint, this one's just a bit shinier to show off in a tutorial. You can find this endpoint nested under the &lt;a href="https://nubela.co/proxycurl/docs#people-api?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;People API&lt;/a&gt;. It assumes you &lt;strong&gt;have&lt;/strong&gt; a LinkedIn URL and you want to &lt;strong&gt;get&lt;/strong&gt; a bunch of information about that person.&lt;/p&gt;

&lt;h3&gt;
  
  
  What you get
&lt;/h3&gt;

&lt;p&gt;What you get will be a response in JSON format. No parsing of any sort will be needed. Even timestamps are given to you as objects, so you can feed them to &lt;code&gt;datetime&lt;/code&gt; without doing any string parsing.&lt;/p&gt;

&lt;p&gt;Exactly how much is that "bunch" of information we mentioned above? It depends on how much any given person has made available on their profile. First of all, the user needs to have made their profile public in the first place; private profiles will 404. &lt;strong&gt;You will never be charged for a request that returns an error code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can see the full list of standard fields if you scroll a bit down in the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Proxycurl Person Profile API docs&lt;/a&gt;, but some you might be particularly interested in include &lt;code&gt;experiences&lt;/code&gt;, &lt;code&gt;languages&lt;/code&gt;, &lt;code&gt;city&lt;/code&gt;, &lt;code&gt;state&lt;/code&gt;, &lt;code&gt;volunteer_work&lt;/code&gt;, &lt;code&gt;people_also_viewed&lt;/code&gt; (a list of similar profiles), and other such fields. You can see a full example of any response in the documentation on the right-hand side below the request that generated it.&lt;/p&gt;

&lt;p&gt;There's a bit more, though. Proxycurl can attempt to go above and beyond, and scrape the following fields if you request them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;skills&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;inferred_salary&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;personal_email&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;personal_contact_number&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;twitter_profile_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;facebook_profile_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;github_profile_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extra&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these additional fields that you request comes at an additional credit cost, so don't request them unless you require them. But when you do need them, Proxycurl puts them a single parameter away!&lt;/p&gt;

&lt;h2&gt;
  
  
  Example walkthroughs
&lt;/h2&gt;

&lt;p&gt;Now that we know what we're working with, let's look at some examples. We'll start with Postman and Python, since we can pretty much copy-paste these from the Proxycurl docs, and then we'll write a bit of JS code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postman
&lt;/h3&gt;

&lt;p&gt;We've previously posted an &lt;a href="https://nubela.co/blog/tutorial-to-test-proxycurl-apis-with-postman-beginners-guide/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;in-depth Postman walkthrough&lt;/a&gt;, but you can follow along here too, and refer to that article if you get stuck.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Person Profile Endpoint&lt;/a&gt; docs, find the orange button that says Run in Postman and click it. Then click "Fork Collection" and log in however you like. If you're logging in for the first time, the screen should look something like this:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xgyo48VH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/postman-login.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xgyo48VH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/postman-login.png" alt="Postman upon initially forking the Proxycurl collection" width="800" height="424"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure: Postman upon initially forking the Proxycurl collection&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add your Bearer Token to the environment as a variable. Limit it to Proxycurl. You can do this from the Variables tab or from the pop-up that appears when you start typing into the "Token" field. You can name this variable anything you like, but &lt;code&gt;Bearer Token&lt;/code&gt; is a good name.&lt;/li&gt;
&lt;li&gt;Verify that the Authorization type is set to "Bearer Token" and that you have typed &lt;code&gt;{{Bearer Token}}&lt;/code&gt; into the Token field and click Save in the upper right-hand corner. Remember to click Save!! Your page should look like this:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PfLoLtsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/postman-auth.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PfLoLtsA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/postman-auth.png" alt="Adding a Bearer Token variable Authorization in Postman" width="771" height="380"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Figure: Adding a Bearer Token variable Authorization in Postman&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Now, we should be able to run something! On the left-hand side, under "My workspace," expand your Proxycurl collection and then the People API, and double-click the Person Profile Endpoint. You can un-check some of the fields if you want or modify others - for example, you might want to change &lt;code&gt;use_cache&lt;/code&gt; from &lt;code&gt;if-present&lt;/code&gt; to &lt;code&gt;if-recent&lt;/code&gt; to get the most up-to-date info, but maybe you don't need the user's personal contact number this time around.&lt;/li&gt;
&lt;li&gt;Once you've modified the fields to your liking, click the blue "Send" button in the upper left-hand corner.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Troubleshooting Postman
&lt;/h4&gt;

&lt;p&gt;If you get a 401 status code, most likely you forgot to hit Save in Step 3. A good way to troubleshoot this is to see if you can fix it by editing the Authorization tab for this specific query to be the &lt;code&gt;{{Bearer Token}}&lt;/code&gt; variable. If that fixes it, then the auth inheritance isn't working, which probably means you forgot to save.&lt;/p&gt;
&lt;h3&gt;
  
  
  Python
&lt;/h3&gt;

&lt;p&gt;Let's now try and make the exact same request, only with Python. In the Proxycurl docs, there's a toggle at the top of the page where we can switch between shell and Python. Here is the right-hand side only of the &lt;a href="https://nubela.co/proxycurl/docs#people-api-role-lookup-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Person Profile Endpoint&lt;/a&gt; section, see the upper-left-hand corner of this screenshot:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V_-mSDMJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/python-toggle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V_-mSDMJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/python-toggle.png" alt="The Shell-Python toggle in the Proxycurl docs" width="800" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In that screenshot, we can simply paste in our API key where it says &lt;code&gt;YOUR_API_KEY&lt;/code&gt;. However, it's best practice to be just a &lt;em&gt;little&lt;/em&gt; more careful with secrets than that when you regularly publish your Python code on the internet so we'll do slightly more work. Also, we'll extract the JSON response at the end and print it. Here's the code for all that, and feel free to use this yourself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;api_endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://nubela.co/proxycurl/api/v2/linkedin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
&lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PROXYCURL_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;header_dic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://www.linkedin.com/in/johnrmarty/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;fallback_to_cache&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;on-error&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;use_cache&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;if-present&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;skills&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;inferred_salary&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;personal_email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;personal_contact_number&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;twitter_profile_id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;facebook_profile_id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;github_profile_id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;extra&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;header_dic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What we get is a huge wall of text in our terminal. But what if we could, say, put a breakpoint and inspect the actual output using &lt;a href="https://www.jetbrains.com/pycharm/"&gt;PyCharm&lt;/a&gt;? Let's give it a try. Change the last two lines to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;header_dic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then put a breakpoint on the print statement, and run it with the debugger. And then we can drill down into every field of the &lt;code&gt;result&lt;/code&gt; JSON, like so:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zvrVIg-q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/python-debugger-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zvrVIg-q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://accountgram-production.sfo2.cdn.digitaloceanspaces.com/nubelaco_ghost/2023/03/python-debugger-1.png" alt="The Python debugger in PyCharm is fantastic!" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fantastic! The debugger is an amazing tool, even when there are no bugs in your code and you just want to see the shape of your data.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript
&lt;/h3&gt;

&lt;p&gt;The following code is meant to be pasted into your browser (i.e. it's not Node.js code). To avoid CORS errors, paste it into a page on the Proxycurl domain, for example &lt;a href="https://nubela.co/proxycurl/docs?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;the docs page&lt;/a&gt;. IMPORTANT: Never paste code into your browser console that you don't understand. This is a major security issue! Ensure you fully understand any JS code you are executing before running it.&lt;/p&gt;

&lt;p&gt;Here is an overview of what the code below is doing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate an object of &lt;code&gt;params&lt;/code&gt; corresponding to what we want to fetch in our query.&lt;/li&gt;
&lt;li&gt;Transform these params into a query string using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams"&gt;URLSearchParams&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Make the request using &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch"&gt;fetch&lt;/a&gt;, including the bearer token as a header.&lt;/li&gt;
&lt;li&gt;Catch any errors and otherwise print a JSON to the console.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And here is the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;your_api_key_here&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.linkedin.com/in/johnrmarty/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;fallback_to_cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;on-error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;use_cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;if-present&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;inferred_salary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;personal_email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;personal_contact_number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;twitter_profile_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;facebook_profile_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;github_profile_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;extra&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;include&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;URLSearchParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://nubela.co/proxycurl/api/v2/linkedin?&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;queryString&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Network response not ok. Status code: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How reliable is Proxycurl?
&lt;/h2&gt;

&lt;p&gt;Finally, let's take a look at reliability. We'll do this in Python. Reusing the same code from above, let's loop the request 100 times:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;codes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;

    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_endpoint&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;header_dic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;codes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;codes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;codes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;code&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;codes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do any of them fail? Here's the output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{200: 100}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In other words, all of them were successful. In fact, last week when I was writing another post called &lt;a href="https://nubela.co/blog/using-proxycurls-historic-linkedin-employee-count-tool-for-investment-research/?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Using Proxycurl's Historic LinkedIn Employee Count Tool for Investment Research&lt;/a&gt; I was regularly bursting 1500 queries at a time, and I found the API completely reliable, reproducing my results each time I ran the same query. If you enjoyed this article, do check that one out - it shows off a pretty cool application of this API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this article, we first discussed how to make a DIY LinkedIn scraper. Then we went over how to build a LinkedIn data scraper easily with Proxycurl using any of the following three methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We introduced you to the Proxycurl &lt;a href="https://nubela.co/proxycurl/docs#people-api-person-profile-endpoint?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;Person Profile Endpoint&lt;/a&gt;, which returns JSON data to you, so that you don't have to do any text parsing of any kind upon receiving your response. For an overview of the rest of Proxycurl's endpoints, check out the &lt;a href="https://nubela.co/proxycurl/docs#explain-it-to-me-like-i-39-m-5?utm_campaign=own_platforms&amp;amp;utm_source=dev.to&amp;amp;utm_medium=social&amp;amp;utm_content=post-build_scraper"&gt;what-you-have-what-you-get ELI5&lt;/a&gt; in the Proxycurl documentation. Now that you know how to use one endpoint, you know how to use them all!&lt;/p&gt;

&lt;p&gt;We'd love to hear from you! If you build something cool with our API, let us know at &lt;a href="mailto:hello@nubela.co"&gt;hello@nubela.co&lt;/a&gt;! And if you found this guide useful, there's more where it came from - &lt;a href="https://sendy.nubela.co/subscription?f=YI47f4TeTuhdFoSrZ763iI5gnFtkM1892fYkWD4WQBr28jBkqkCoOcaUummVfjrHTdJMswah3Df7630TYW46gSDXzPUw"&gt;sign up for our newsletter&lt;/a&gt;!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
