Best Site to Source Developers (Poll Results)

booleanstrings Boolean Leave a Comment

Last week, I ran a poll on LinkedIn- “Which site, do you think, is the best for sourcing Software Developers?” which attracted a massive 60K+ views and 1,400 votes.

It was a bit of a trick question. I had hoped to facilitate a discussion on combining sites for sourcing – and so it did (see the comments). Other sites were suggested, including Twitter. But most people just voted.

While the poll was intended for Technical Recruiters, it attracted Developers themselves (mostly voting for LinkedIn!) and others working in Tech. The “Other” votes included some folks who sell sourcing software 🙂

Here is a word cloud of the participants’ Headlines:

So – “which site is the best?” If I were to choose only one site, that would be LinkedIn. It is common sense: LinkedIn shows Software Developers’ job titles, companies, and years of experience and at the company. In comparison, Github does not have a field for job titles and few have filled out the company field. Stackoverflow and Twitter have free-form bios rarely disclosing the necessary info to prequalify someone for reaching out.

The fruitful approach is combining data across sites. This allows you to find prospects who will not be found on any (one) site – LinkedIn included.

As an example, someone who is popular and active on Github (but does not tell us where they work) with a “shallow” LinkedIn profile where they did not even mention programming languages, can only be identified through cross-referencing. And if you get their info from a “code authors” file, all you have is the name and email (plus you know that they worked on the project).

People aggregators like Amazing Hiring “pre-cross-reference” professional profiles for us ahead of time. That provides a productivity boost and ease of use – and I highly recommend trying them!

However, information in databases:

  1. gets outdated
  2. may not have the data for your particular needs or locations (that you can check during a trial).

You can do some “live” cross-referencing for free, targeting your requirements, and will pull today’s data. Check out the recent posts Who Are You? The Art of Cross-Referencing, Github Example, and How to Collect and Cross-Reference All Emails in Search Results for some ideas.

Our Scraping webinar next week will help if you want to dig deeper into cross-referencing – check it out!






How to Collect and Cross-Reference All Emails in Search Results

booleanstrings Boolean Leave a Comment

I want to tell you a fast way to collect prospects’ email addresses from Google search results pages and then find the professionals on LinkedIn. The result is a target list of LinkedIn profiles for which you know email addresses. The method is free and requires no coding or being “technical” whatsoever.

See the steps in a fun 7-minute demo by David Galley. (We felt it is easier to follow a video than if I described each step in a post. )

Tools you will need:

  1. Julia’s Email Extractor
  2. Linkclump or similar (to open selected links in separate tabs)
  3. Google
  4. Basic LinkedIn.

David shows how to collect and cross-reference Kubernetes Developers on Github based on X-Raying “authors” files as a use case. (The demo is complementary to my latest Github Sourcing presentation sponsored by Amazing Hiring.)

We call digging under links “in-scraping.” It is available in some commercial scrapers, but the setup is not nearly as simple.

The demoed technique is wildly fast, free, and applicable to endless other use cases. Applied to Talent Sourcing, the technique is efficient in the era of remote work when candidates’ locations are less critical.

Join us for the upcoming webinar on July 28,

Web Scraping For Recruiters

and learn how to scrape simply for your productivity.

33 more: Precise Custom Searches by Sites and Across

booleanstrings Boolean 1 Comment

Google Custom (Programmable) Engines are capable of finding particular values (such as someone’s location or employer) precisely with the aid of special search operators. The precise filtering ability is based on the “objects” defined by – such as Person, Organization, or Place – which site creators can embed in the page code. The “custom” search operators are written as more:pagemap:<custom addition> which you can shorten to more:p: 

There is no tipsheet for these operators since their syntax is often site-specific (unlike the 21 Google operators). This post can serve as the “next best” since you can alter and utilize the search examples. Also, check other (few) writeups, particularly this from my French friends Guillaume Alexandre and Pierre- André Fortin.

Expect a learning curve, but there is no coding involved.

Since David Galley and I are in the people search business, our research, book, tool, and upcoming webinar cover the object “Person” and its fields in detail.

more: operators allow you to search for specific values, as you will observe following the example links in the table below. But they also work to find pages with a given structure, regardless of the values (add your keywords):

(As a side note, people have been telling me that our book title “Custom Search Engines – Discover more: is mistyped – it is not!)

At this time, social profiles on LinkedIn, Facebook, and Twitter do not follow a Schema format that CSEs can query. LinkedIn used to have “Persons” on profiles a few years back, but, alas, it has become inconsistent.

Here is a collection of site-specific Person example searches. It is followed by searches across sites (using a “find everything” CSE). Open-ended searches across the web can find “Person-friendly” sites for your research.

I constructed the below examples using Social List, a CSE API-based tool that hides the operator complexity from end-users and collects results in Excel.

SlideShare Country
Area or City
XING Industry
Github Name
Gitlab Name
Across Sites Address
Job Title
Honorific prefix (Mr., Ms., etc.)
Honorific suffix (MBA, PhD, DDS, etc.)

Join us for an interactive two-part class, Become A Custom Search Engines Expert, on July 20-21 and learn about the unique technology. Attendees will receive the slides, recording, and one-month support. The webinar is recommended to Sourcers, #OSINT practitioners, and anyone familiar with advanced Google search and, in particular, X-Ray (the site: operator).

Search for US Voters with Custom Search Engines #OSINT

booleanstrings Boolean, OSINT Leave a Comment

US Voters site contains public information. Each record has the voter’s name and other info such as addresses, and, potentially, emails, phone numbers, and gender. The site has the data for sixteen US states. For many professionals who are not on LinkedIn or are barely online altogether, the voters’ info provides Sourcers with a way to reach out to them. There are OSINT applications outside of talent sourcing as well.

You can search by name, city, state, party, and year of birth on the site. Since the profiles are public, you can also X-Ray and search for values that you won’t find with the site. Here are, for example, Colorado voters with a Gmail address: “” colorado

You can search even better, using precise filters, with Custom (Programmable) Search Engines – CSEs (one of my favorite topics).

CSEs is a software layer on top of Google, which many know as a way to hide complex or repeated search syntax for user-friendliness and productivity. For example, you can hide the site: operator and end-users won’t need to retype or even see it yet the CSE would X-Ray the site.

But CSEs also have an extraordinary power: they can search for particular values with special (ugly-looking, sorry) search operators. Depending on what a site (such as LinkedIn, Github, XING, Voters, Gitlab, etc.) “communicates” to Googlebot when it visits profiles, you might be able to search for professional, contact, and demographic information.

The “communication” between a page and its robot visitors happens via the source code on the page that follows a standard called This code is not to tell browsers how to render the page but rather inform crawlers of the page “structure”, meaning, objects, and their values. When you search for movies and see star ratings in the search results, those come from the pages with an object Movie and those rating values. Google does not offer to search for highly-rated movies but CSEs do.

I will leave the movie search for another time (or implement it if you learn how it works, let me know!) Of interest to us is searching for people. A profile page on a social site may contain an object Person with attributes like name, address, etc. – for which we can search with CSEs.

This way, CSEs offer to search parts of the web as if they were structured databases. No other software provides a similar technique on such as scale.

You can learn all about CSEs in our new book and the upcoming interactive webinar

Become A Custom Search Engines Expert.

What about the Voters? The site has some structure: the records have a Person object and you can query them for values such as gender, email, and more, as follows. (Obviously, you cannot do that from the site.)

(If you like “fancier” vs. shorter operators, you can also replace :p: with :pagemap:)

I realize that the above is a pretty swift introduction to CSEs for those who are not familiar with the technology. If the subject is of interest, join us for the class Become A Custom Search Engines Expert to get going. Keep the materials to help with your exploration and applying the unique technique. Hope to “see” you there!

Who Are You? The Art of Cross-Referencing, Github Example

booleanstrings Boolean Leave a Comment

Yesterday I saw a recruiter’s post on Facebook asking for advice on how to figure out which candidate had texted them when they couldn’t see the name, only the number. (Has it happened to you?)

A recurring problem in sourcing is dealing with insufficient information. You want to reach out only to relevant people, but the data (say, a Github profile) does not have the essential info such as a job title, company, and often, even location. Emailing everyone who lives in Boston and writes in Java will unnecessarily bother senior managers, students, professors, retirees, people who just started a job, etc.

Let’s commit to being spam-free!

The solution to finding the missing qualifying information is cross-referencing – done by you or by software.

The obvious site to look for professional parameters is LinkedIn. And now it has become possible to find everyone by a registered email, no matter which type of account you have – Basic’s fine – by uploading an email list to LinkedIn. The list can be as long as 8-9K records, and you do not even need the first and last names. (Repeat if it didn’t work.)

Here is the process.

  1. Start with a Github search like the above and collect (public) emails. Instant Data Scraper, one of my favorite Chrome extensions, can do it, or use Julia’s Email Extractor along with Autopagerize (all marked with an Asterisk in my tools list.)
  2. There is a wise intermediate step to take before you start the list cross-referencing. In the  Instant Data Scraper search output, you will find locations and bios – you might want to filter by that first. After cross-referencing, the extra data will be “gone” – and some people will not say on LinkedIn profiles things they did in Github bios. (Also – if anyone in the Github list stands out, check them out right away.)
  3. Upload the email addresses to LinkedIn the new way, and you will arrive at a list of profiles with professional info for people for whom you already know a lot:
    • Programming languages they use (or even their numbers of repositories or followers or other Github search filters)
    • Their email address
    • Their LinkedIn profile

The idea of cross-referencing is not new, but the current improved “Contacts” functionality makes the technology available at scale.

Note that their LinkedIn profile may be “shallow” and lack the programming languages listed – but you know that they use, for example, Golang, from Github. You will be surprised how large the percentage of those “LinkedIn-shy” Github users research shows. This means that you will be steps ahead of those colleagues who still only source on LinkedIn: your results will include potential candidates who are “invisible” on LinkedIn!

The advantage of the described method is that it comes at no cost and provides the most up-to-date data. It can also be easily generalized in application to any email list, no matter what the source. (Keep the intermediate “filtering” step in mind for better targeting.)

People aggregators like AmazingHiring do this profile association for users ahead of time, eliminating hands-on cross-referencing and including sites with professional data beyond Github and LinkedIn. (I first wrote about aggregators in 2011, calling them the “Dream Software”).

I am glad to invite you to a webinar on July 14th,

Github – Recruiters’ Paradise

sponsored by AmazingHiring, where we’ll go over this and other endless Github sourcing possibilities.

[Edited: if you missed it, here is the recording:]

Interesting: Two File Types in Google Images #OSINT

booleanstrings Boolean, Google, OSINT Leave a Comment

It is new – Google Image search responds to the filetype: operator for document types such as PDF, DOCX, or PPTX.

security conference attendee list director vp filetype:pdf

This is cool because Images is a separate database – its results ranking is different, and extra results may surface. And you can preview the images before opening the results.

It is possible to combine the image search in documents with other parameters, such as image color, size, type, etc., available in the Advanced Image Search. For example, here are large blue org charts at banks: filetype:pdf orgchart bank.

Before the change, you could use the operator filetype: in Images looking for image types such as PNG, JPEG, BMP, ICO, GIF, etc. – you still can; for example, bank “new york” filetype:ICO.

Now, Google will respond to TWO filetype operators to search for images of a given type in documents of a given type: filetype:pdf filetype:png butterflies.

I sense that it is a work in progress; Google may be re-implementing its “file types” found in search. (We have seen some early signs before). This search for two different file types in the “main” Google now brings results: filetype:pdf filetype:html healthcare providers. (Expect another post. 😉 )

It is interesting and worth some research time!




Check Your Assumptions for LinkedIn Connections’ Search

booleanstrings Boolean, LinkedIn Leave a Comment

LinkedIn connections and connection levels are as old as LinkedIn itself. The underlying idea of the Social Network is based on connections!

You would think that LinkedIn (founded in 2002) has figured out the search for connection levels by now. But if you trust connection search – for example, routinely search for the second level members to connect with – you are up for disappointment: connection search has multiple issues. Here is a summary; these things (or rather, bugs) are good to keep in mind.

A. Search for each connection level vs. no level selection is not the same

You might think selecting each connection level – 1st, 2nd, and 3rd – will provide the same results as selecting no levels. (Based on the definitions, you are right.) But it is not so: compare everyone with everyone with connections levels. The latter search misses about 1% of profiles – and not necessarily out of your network.

B. Some members are not found by connection level search

This is a screenshot showing a result – a legitimate 2nd connection – which disappears when any (or all) connection levels are selected. The search depends on something about the member that matches the search and the person who searches (that contributes to the hiding effect).

That might explain why selecting connection levels results in a smaller number of profiles.

C. Third and out-of-network search returns second connections

I am sure you have experienced that. The “top” results of the third+ connections search are mostly second connections for me (ones with whom I have connections in common), not the third.

D. Some 3rd level connections are displayed as the second

But there are no common connections:


E. Some 2nd level connections are displayed as third

I invite you to find an example for this one 🙂

What about the first-level connections? Something is going on there as well.

F. Connection numbers discrepancy

Compare the number of your connections in search and in contacts and let me know if it is the same.

It helps to verify our assumptions in sourcing!

P.S. Check out our latest sourcing wisdom about LinkedIn in the LinkedIn Solved class recording.



Custom Search Engines’ Filters – Gitlab Example

booleanstrings Boolean, OSINT Leave a Comment

Gitlab, like Github, is a platform providing a Version Control System, allowing Developers to collaborate on writing code. It claims to have 30+ MLN profiles, quite comparable to Github’s 60+ MLN. There are some differences in functionality and user profiles.

(If you source for Developers, the below search syntax examples might help in finding results – scroll down to see the Gitlab CSE operator syntax. But most importantly, the Gitlab example demonstrates a powerful sourcing technique – filtered search in CSEs).

Gitlab profiles offer a rich’s Person structure, allowing you to X-Ray it in a filtered way using (a favorite subject) Custom (Programmable) Search Engines (CSEs). The structure even has a filter for emails!

If you are not familiar with filtered search available through CSEs on sites that support’s structure, here is, in brief, how it works.

Web page creators can put some “meta” code within the page source code – not for rendering but for telling Googlebot what “objects” it contains – a person, an organization, or a movie, for example. The Schema standard defines the format for “communicating” those objects.

The objects embedded in meta-code may have values – say, a page may have an object Person with the value “job title” equal to “developer.” CSEs provide a way to search for that structure and values – for example, you can search for all people with the title “developer” on a particular site (if its structure supports it). I.e., you are getting awesome search abilities- now you can search for results based on the values such as job title, company, location, and more, depending on the site to X-Ray.

David Galley‘s and my book Custom Search Engines – Discover more: is out (yay!) and is the only book about CSEs. It talks about the subject in-depth. (Make sure you get an electronic copy where you can click on links). So will our class.

Join us for an interactive class, Become a Custom Search Engines Expert, on June 29-30 (Tue-Wed) 2021, and get going with CSEs in just two days! The presentation will be of interest to Recruiters, Sourcers, OSINT Researchers, and anyone who does research using Google.

What about Gitlab? Here is the full list of its CSE search operators – use them in the GitLAB CSE below (or build your own CSE).

  1. more:p:hcard-fn:<name>
  2. more:p:person-role:<role>
  3. more:p:person-worksfor:<organization>
  4. more:p:person-location:<location>
  5. more:p:person-email:<email>
  6. more:p:metatags-og_description:<bio>


Here are the values you can search for and extract using CSE APIs – to do so, write some code or use our tool, Social List:

Search in Business vs. Recruiter (Guess Who Wins)

booleanstrings Boolean, LIR 3 Comments

[Edited June 26, 2021: alas, the operators are gone for now. I hope they will be back!
Our class LinkedIn [Sourcing] Solved fully reflects the change.]

The never-documented LinkedIn search operators make people search with a personal account – Business, Job Seeker, and Basic – comparable or better than the most expensive subscription, LinkedIn Recruiter (LIR). Let’s go over a comparison, operator by operator.


The operator works in LinkedIn Business (and Basic). The search for the headline is absent in Recruiter – and altogether, “officially” on LinkedIn. It is such an omission!

Example: Members who are open to work:  (headline:open OR(headline:looking)) (work OR(job))

Who wins: Business


With a Business account, you can search for the skills that members enter. In Recruiter, it is impossible. It looks for “assumed” skills picking keywords from profiles. It is not exactly like keyword search but is close – see an example below. (How is it valuable?)

Example – Business vs. Recruiter

Members with the skill including the word “lazy” – skills:lazy. It shows fewer than 500 profiles that have Lazy Eye Treatment or Lazy Loading (a term in Computer Science) skills. Some also said they are lazy, but they are in a small minority. 🙂

In Recruiter, we get 30K+ results for the skill “lazy”(feel free to laugh!).

Searching “lazy” as a keyword shows 49K+ results. I.e., Recruiter “assigns” a “skill” to over 60% of members who have the keyword somewhere on the profile – for example, work at the “Lazy Dog” restaurant. How Recruiter decides to “promote” a keyword to a “skill” it, of course, a mystery.

Who wins: Business


Example: school:harvard

Search by the school name is absent in Recruiter.

Who wins: Business


Example: fieldsofstudy:101001 (101001 is the code for “Political Science and Government”)

The Field of Study is available in Recruiter.

Who wins: a tie


Well, there “should be” an operator for the degree – but, alas, it does not work (200 is the code for Bachelors).

Who wins: Recruiter

startyear: endyear: (years in school)

Example: endyear:2022

Who wins: a tie

companytype: companysize:

Example: companysize:I – people who work at companies with 10K+ employees.

Who wins: a tie

yoe: (years of experience)

(Note: LinkedIn tells us that the “years of experience” is the number of years between starting a job and now – or ending work. But it is not precisely that because some members can be found by different years of experience: yoe:3 AND yoe:6.)

In Recruiter, it is easier to search for an interval. The years are between 0 and 30. In Business, you can search for years of experience between 0 and 100.

Who wins: a tie

spokenlanguage:  ‘

The spoken language is a free-form text field on the profiles – members can enter “any” languages, ignoring the prompts for the standard ones. For example, these 11K Developers “speak” Python: spokenlanguage:python.

It is not so easy to search by the “Python” spoken language in Recruiter:

Who wins: Business

functions: seniority:

The operators in LinkedIn Business work just the same as Recruiter selections.

Who wins: a tie

Years at a company or in position:

Alas, I have not found those operators.

Who wins: Recruiter

Also, compared to Recruiter, the Business account allows Boolean search with the operators. For example, you can exclude people from a given industry. NOT (industry:104) excludes members in Staffing and Recruiting.

Who wins: Business

The end score:

  • Business – 6.5 points
  • Recruiter – 4.5 points

Please join me for the class LinkedIn [Sourcing] Solved. We will go over the operators and other less known yet powerful features of a personal LinkedIn account. There is a limited number of seats remaining, and the presentation sold out the first time – sign up now.

10 Alternatives to InMail

booleanstrings Boolean Leave a Comment

You can reach prospects who ignore your LinkedIn InMails in at least ten different ways.

I am sure you familiar with some. How many of the following methods do you use in practice? (Please feel free to comment.)

  1. Email. If an email address is associated with a LinkedIn profile, your message will land in the same email Inbox as an InMail. However, the email comes from you, while InMail has a return address. Gmail users may get your InMail in the “Social” category, which they never check. Others ignore everything LinkedIn sends! Email does not have that problem.
  2. Call.
  3. Text.
  4. Invite to connect. LinkedIn has introduced a weekly limit for invitations – however, if you upload a list of emails, the limit does not apply. (Besides, uploading will let you see which profiles are associated with which addresses – big deal!)
  5. Ask a common connection to be introduced.
  6. Find someone with whom you have a LinkedIn Group in common, go to the group, and send a message there. Group messaging is no longer limited.
  7. Source in LinkedIn Events, and you can message everyone. If you organize an event, you can even download a list of attendees along with their emails! To do so, you need to create an event as a company and set the registration “via LinkedIn.” If you search for people with security clearance or other “elusive” qualities (meaning keywords absent from profiles), Events are a promising channel.
  8. Message on any site that allows it – Facebook/Messenger, Reddit, XING, Slack, you name it.
  9. @mention them on any site that allows it. It is a semi-private way to reach out on Twitter.
  10. Interact with their posted content and comments.

Learn how to find contacts in our popular workshop next week! June 16-17 (Wed-Thu). Seating is limited.