

Please join us for an advanced ChatGPT course for Recruiters on September 13, 2023,
We will go over a myriad of potential AI applications in sourcing and discuss what is reality and what is a myth.Please join us for an advanced ChatGPT course for Recruiters on September 13, 2023,
We will go over a myriad of potential AI applications in sourcing and discuss what is reality and what is a myth.Technical Recruiters cannot afford to stay away from GitHub due to its rich data about Software Developers. It is Tech Recruiter Paradise. But GitHub user search is more of a “Jungle.” Its syntax is incredibly complex. The documentation is helpful, yet it also contains several errors and omissions, which I will outline.
Here is an awesome list of search operators (which GitHub calls “qualifiers”) by my friends Sofia Broberger and Suzanna Frazier:
Now, let us proceed to discuss
How GitHub User Search Works
If you are just getting started, practice with the advanced search dialog – it will create the right search strings for you. But it is restrictive (same as on search engines or Indeed).
Keywords
The docs say that keywords find users by name and username. But they also find things you see on the profile under the image – bio, site, X, and company. Locations and languages will not be found.
Keywords support “normal” Boolean logic operators – AND, OR, NOT.
Partial Keywords
Partial words will be found (I haven’t seen this explained.) Example:
Operators
The most useful for sourcing are the operators language: and location:.
The note above in the “Keywords” “chapter” means that, when searching by location, you may also want to look for it as a keyword separately – like chicago -location:chicago.
If you search for a language that is not on their list, GitHub will ignore it; language:lisp language:nonexistent is the same as language:lisp (make sure you do not get caught here.)
The operator location: does work with accented characters; it is important for global Recruiters. Example: location:Київ.
Special characters under operators for location and language serve as a divider – and give you a Boolean AND – location:NYC*SF. They are ignored at the beginning and end of the parameter.
Partial operator arguments will not be found.
Knowing that any user can only be found by one “main” language is essential.
With the operators, the Boolean OR is the default. (Incorrect in the docs.) NOT, for a change, is written as minus.
The other two operators search for the numbers of:
The number format accommodates for “numrange” like 2..5, and these two – >, <. Example: followers:>1000 repos:>6 language:C. You can also write followers:=<3 or followers:<=3 (but not followers:=3)
A drop-down on GitHub search allows you to sort results by “best match,” followers, repositories, and join date. (Interestingly, GitHub user search API takes extra operators followers:, repositories:, and joined:, as well as sort: to run the same functionality).
Phrases
Phrases in keywords should be in quotation marks. (Nice that they didn’t do anything unusual here 😉 ) Example: “NYC SF”.
However, spaces between quoted words under location: work as a Boolean AND! Example: location:”francisco san.” I haven’t seen this documented.
Parentheses
Parentheses are ignored. OR is executed first, then AND (same as on Google). I haven’t seen this documented.
The Good News
The good news is that, in practice, language: and location: “cover a large territory” and are often sufficient for collecting a sizeable promising user list to investigate further. Keep the search syntax subtleties covered above in mind.
Please join us for a deep dive into Github sourcing –
Leveraging GitHub: Advanced Data Mining and User Profiling
on August 30th, 2023, Wednesday.
Hello IT Recruiters:
We have fixed, improved, and documented the tool I recently announced at Sourcing Summit Tech. Access it here:
LUSOG = Let Us Search On Github.
Ensure you follow the installation and execution instructions strictly, starting with creating a copy of the LUSOG Table. There’s Help and a silent video with guidance. We hope it is straightforward.
The tool is free and provided “as-is,” offering Technical Recruiters massive power in searching for Software Developers. (We are in parallel developing a web-based tool on our future site Brain Gain Soft; please stay tuned.)
LUSOG finds GitHub users based on your search parameters, collects complete user data, including emails, and presents this information in a Google Sheet.
In the backend, LUSOG runs GitHub’s REST API to search GitHub. The user is responsible for providing the Tool with their (free) personal GitHub API token. To use LUSOG, you must also give AppsScript permission to run and access the GitHub API. (This means you need to have GitHub and Google accounts.)
Select “Search GitHub Users” and enter search parameters according to GitHub’s syntax (see search help and user search help).
By default, LUSOG returns 100 results per query. You can request that the following 100 results be loaded by pressing the “Load More” button at the bottom. The maximum number of results for the same query is 1,000.
Imagine obtaining and exporting information like below in a few minutes while sipping your coffee!
I would be glad to hear how the tool serves you; please email me.
Now, if you are searching for Github users, with LUSOG or not, I must warn you that:
Github User Search Syntax
Your typical search for Developers would include the operator language: and several location: operators – or “qualifiers,” as Github calls them.
NOTE: if you search by a keyword, you will find the user’s name, nickname, bio, site, X (Twitter), and company – all the things on the profile page – but not the location or repository languages.
Github User Search supports a few more qualifiers in addition to language: and location:. Search terms can be arranged in a Boolean search statement. The syntax is bizarre (and mis-documented on the site):
Please join me at a new class
Leveraging GitHub: Advanced Data Mining and User Profiling
on August 30th, 2023. We will dive deep into GitHub sourcing and cover less-known approaches. Materials and support are provided. Seating is limited.
I hope to see you there!
Professionals generally fall into two categories: 1) people who are handy with Excel, Google Docs, merging, VLOOKUPs, etc., like David Galley, and 2) those who try to avoid working with tables, like me. I am glad to have David on the team, but I can’t bug him with every table-related task.
ChatGPT Code Interpreter (you must have a $20/mo account and select “Code Interpreter” from Settings) is a big helper for mundane tasks that are part of any sourcing process. I will go over a use case – part of my sourcing process for most projects – where Code Interpreter automates work with tables.
“Code Interpreter” is like an AI Data Analyst. You can upload files (one at a time); it will process them, give you a file to download, and report on the process it went through. It can produce clever summaries and graphs. The simple data conversions required in sourcing are a breeze for the system.
If I source, populate a project on LinkedIn Recruiter, and export files (25 records at a time,) Code Interpreter can merge the files, clean up encoding, and clean up the names, leaving first and last, e.g., Mr. Joe A. B. Doe, Esq –> Joe, Doe.
Intending to contact the potential candidates, I run the (merged) list through contact-finding systems: SalesQL, ContactOut, and SeekOut. All of them have bulk uploads.
Code Interpreter can merge the contact finders’ resulting tables with the original Recruiter export. I love that no coding or formulas are required to interact with the tool. Here is my “VLOOKUP” expressed in English. The file referenced at the top of the screenshot is a cleaned-up Recruiter export; I am uploading a SalesQL export for the same profiles.
I repeat the process with exports from the two other contact-finding systems by telling the system, “Do the same,” and uploading the relevant exports.
As the last step, I ask the tool to put all emails in one column and deduplicate.
When all is finished, the resulting table contains the original data from Recruiter; the email column is populated with data from the four systems. Since these are already vetted profiles, the output can go to the client for sourcing projects or serve as a contact list if it is full-time recruiting.
(I admit that for me, in a sense, this application of the tool is “too late” since I already have consultant-written custom scripts that do the above. But I took it as a practical, familiar example of using Code Interpreter. The process was fast.)
I also asked Code Interpreter for a summary of the file and got a solid report:
I was working with a small record set (about 40). For a larger group of profiles, a summary like this helps to understand the market and communicate with the Hiring Manager.
What impressed me throughout the dialog with Code Interpreter was that I felt a good level of understanding (if you know what I mean) compared to other AI “companions.” The tool understood things I said very briefly. It kept the content and explained what it was doing, and I never had to correct it in the experiment.
As a generalization, look into Code Interpreter if you do not like writing formulas (like some of us) but have to deal with data (as we all do). 🙂
Please check out my upcoming class –
ChatGPT and AI for Sourcing and Recruitment
on August 2, 2023. We will go over many tools and applications “in plain English.”
Social Media Marketing can play an important role in keeping a pipeline of potential targets informed and possibly interested. Running groups, newsletters, and events along with social media shares can make a difference in the perception of your company as well as attract the right people. Combining channels means reminders and further reach.
For starters, your profile as a marketer is important (see some LinkedIn Profile SEO tips). As of late, LinkedIn is also more likely to promote something you share if it correlates with your profile background.
Part of our work happens on Social Media. We share content, moderate Social Network groups, and also use the groups to promote our events. We have made mistakes along the way for sure, and eventually learned a few Social Marketing tips that do not require special tools, yet save time, and expand the reach. See some of our numbers below (showing that we are reaching interested people).
Here are some aspects of Online Marketing.
Events. Does your company host or participate in events attractive to your target audience? Posting them on Social Media will allow you to track the audience and even expand your email list (e.g., from LinkedIn Events).
Groups. LinkedIn Groups are long beyond their glamor days. But you can “pin” and “broadcast” messages which makes them (more) visible. Professional Facebook Groups, on the other hand, are flourishing; as an admin, you have marketing power.
Newsletters. If you set your LinkedIn profile to be in “creative mode,” you can start a newsletter. If you are busy, get help from ChatGPT for editing and Grammarly, for polishing. While “plain” LinkedIn articles are barely shown, newsletters (i.e. articles with a “newsletter” option) have a good chance to gather an audience.
I will share Social Marketing tips and techniques in a brand-new webinar
“Integrating Social Media into Your Talent Recruitment Strategy”
on JULY 27 @ 8 AM PACIFIC, and you are invited!
P.S. Our “social” numbers:
Hung Lee asked me on the recent Brainfood on Air show dedicated to LinkedIn, whether the comparison chart between X-Ray and LinkedIn Recruiter remains the same as in October 2022 when I published it. Not quite. Thanks to David Galley for helping me to update it.
The changes are mostly subtle though. X-Ray remains a powerful tool.
Enjoy!
LinkedIn.com | LinkedIn Recruiter | Google X-Ray (finds public profiles) | Google Template | Example |
Name | Y | Y | intitle:<name> | site:linkedin.com/in intitle:”phil tusing” |
Current Job Title | Y (false positives) | Y (false positives) | Y – intitle:<title> | site:linkedin.com/in intitle:”executive assistant” |
Current Company | Y (false positives) | Y (false positives) | Y – intitle:<company> | site:linkedin.com/in intitle:seekout |
Last Company on Profile (even if left) | N | N | Y – inanchor:<company> | site:linkedin.com/in inanchor:”morgan stanley” |
Last School on Profile | N | N | Y – inanchor:<school> | site:linkedin.com/in inanchor:ucla |
Headline | N | Y – headline: secret operator | Y – inanchor:<headline> | site:linkedin.com/in inanchor:”open to work” |
Summary | N | Y – summary: secret operator | N | |
Current Job Title | Y | Y | Y | site:linkedin.com/in intitle:machinist |
Job descriptions | N | N | Y (by keywords) | site:linkedin.com/in “scaled up” start-up cloud bay area |
Self-Entered Skills | Y – in Company Employees and School Alums search | Y – skills: secret operator | N | |
Skills and Assessments | N | Y but works almost like keywords | ||
Past Company | Y | Y | Y (by keywords) | site:linkedin.com/in -intitle:chevron inanchor:chevron |
Past Job Locations | N | N | Y (by keywords) | site:linkedin.com/in “united kingdom” canada AROUND(3) present |
Past Job – <title at company> | N | N | Y – use AROUND(X) | site:linkedin.com/in “CFO” CFO AROUND(3) google |
YOE | N | Y (but rounded) | N | |
True Years at Company | N | Y (but rounded) | Y – with AROUND(X) or Asterisks | “present” site:linkedin.com/in “present” AROUND “2..6 years” operations manager |
Years in Position | N | Y (but rounded) | N | |
Current Location | Y – by Area Name | Y by Area Name or Zip/Radius | Y – by Area Name | site:linkedin.com/in present AROUND(3) “greater new york” operations manager “new york” |
Profile in Language | Y | Y | Y – secondary profiles end in /<lg> – 2-letter country abbreviation | site:fr.linkedin.com/in/*/fr |
Spoken Languages | N | Y | Y – approximate | site:linkedin.com/in “Native or bilingual proficiency” tagalog |
Function (calculated) | N | Y | N | |
Seniority (calculated) | N | Y | N | |
Company Type (calculated) | N | Y | N | |
Company Size (calculated) | N | Y | N | |
School | Y (Boolean) | Y (selection only) | Y (by keywords; imprecise) | site:linkedin.com/in “school of arts and enterprise” -intitle:”school of arts” |
Last School | N | N | Y – inanchor:<school> | site:linkedin.com/in scientist inanchor:sorbonne “sorbonne” |
Field of study | N | Y | Y (by keywords) | site:linkedin.com/in “quantum physics” university Phd |
Industry | Y | Y | N | |
Years of study | N (but see school alumni search) | Y (but not tied to a school) | N | |
Degree | N | Y (but may be incomplete) | Y (by keywords) | site:linkedin.com/in mba AROUND(3) wharton management consultant big 4 |
Grades at School | N | N | Y (by keywords) | site:linkedin.com/in GPA AROUND(3) “4.0” accounting |
Other accomplishments – Publications/Projects/Courses/Licenses/etc | N | N | Y (by keywords) | site:linkedin.com/in/ “credential ID” AROUND(2) CDSP |
Recommendations | N | N | Y (by keywords) | |
Open to Work Status | N | Y | N | |
Network Relationships | Y (buggy) | Y (buggy) | N | |
Followers of | Y | N | N | |
Connections Of | Y | N | N | |
Group Member | N | Y | N | |
Open to Volunteering | Y | N | N | |
Service categories | Y | N | Y (some) | |
To generate target public profile lists in Excel by precise search, use our tool Social List (trial, subscription) | Check out my 7-Day Bootcamp starting September 5th |
We did not anticipate such a huge response to the Let’s Seach on Github Google Sheets table.
Two things emerged:
So here is what’s happening:
In the future, we will also populate the soon-to-be-alive BrainGainSoft site with other sourcing tools, going beyond IT sourcing. One of the next projects is a Google search results scraper. (As you may know, with the recent rearrangement of Google search results, most of those tools are broken).
[EDITED]: for updated information, please go to Github Syntax and the LUSOG Tool Release.
Guest post from Talent Sourcer Mike Santoro
LinkedIn does not value public candidate recommendations as much as Recruiters and Sourcers do. There is currently no way to search natively on Linkedin for candidates publicly endorsed by their managers, coworkers, clients, and friends. Even more valuable would be a way to search the rich text that people use to describe the people they recommend. This post will show you a new way to search for candidates based on the text in their recommendations section.
Social proof is powerful. As a Recruiter and Sourcer, it feels like receiving a delightful and unexpected present when you find a great candidate and scroll down to the bottom of their profile and see they have 5-10 public “glowing” recommendations.
Working with candidates who have public recommendations on their profiles has at least three significant advantages:
1) You feel more confident in the authenticity of the candidate’s work history, skills, and abilities because others have publicly attested to it. When recommenders are willing to put their professional reputation and name on the line as a “public stamp of approval,” their testimonies bear weight.
2) You can enhance your personalized outreach messaging – “Hey Bill, I saw John Smith highly recommended you on Linkedin and said you were ‘dedicated and resourceful’…”
2) It’s easier to “Sell” your candidate to Hiring Managers. The social proof of 5 colleagues who worked with the candidate for three years is substantial evidence for the hiring manager to feel more confident in their decision.
Usually, recruiters must persuade hiring managers to interview candidates based on their impressions from (often) limited data points such as resume and profile quality, social media postings, and prescreen call impressions. Social proof, like LinkedIn Recommendations, equip recruiters with another high-quality data point that adds validation,
“Mr. Hiring Manager, don’t take my word for it; read these five recommendations on LinkedIn from people who have worked with John for the last six years. Take a look at what they say about him:”
How to X-Ray Recommendations Text:
With this new string, you can search LinkedIn profiles by words and phrases in the candidate’s recommendations section.
site:linkedin.com/in “click here to view” AROUND(100) “[insert keyword(s) or phrase]”
for example,
site:linkedin.com/in “click here to view” AROUND(100) (“Excellent Manager”)
site:linkedin.com/in “click here to view” AROUND(100) (“caring”|”honest”|”reliable”)
You can also do multiple phrases separately, but repeat the entire AROUND(100) function like this:
How do you apply this idea to your searches?
(Crash course on google x-ray search)
inanchor: operator will search headline, location, most recent company name, most recent school name
(see more on inanchor: in these articles Sink Into LinkedIn Headlines – Tie inanchor: To Your Strings and Raise inanchor: Sail to LinkedIn Locations, Titles, and Schools
intitle: operator will search current (present) company title and current (present) company name.
Example search with recommendation text:
Commercial Construction Project Managers (by current title or headline) in Phoenix, AZ, who also have LinkedIn recommendations where recommenders describe them as “Well Organized” OR “Highly Organized” OR “Dedicated:”
This search has 64 results.
Try it out! Think creatively about what words people might use to recommend your targeted candidates. This is a new search strategy, so it will take time to perfect.
Other ways to search for profiles with recommendations without searching the text of the recommendation:
Mike’s “A-Players” String = profiles with at least five public recommendations on Linkedin:
site:linkedin.com/in “5..75 people have recommended”
or
Profiles with any number of recommendations:
site:linkedin.com/in “recommendations received”
“For 💓 of Sourcing and Sourcers” – Mike Santoro
One of the ChatGPT Plugins is Scraper. Here are my impressions about it.
While it is uncertain how well it can – we need more testing – it shows a decent degree of Internet access compared to other plugins.
Unlike many scrapers, it will not access pages where you are logged in. So it is not an option to use it on a LinkedIn search. However, it did access a dynamic page – Google search results – and produced them, in the same order that I had encountered:
There is built-in protection against scraping personal data:
Scraper even told me at one point that “it’s against OpenAI’s use case policy to use the model for data scraping, especially personal data.” (Sounds ambivalent.)
As often happens, rephrasing your request makes a difference. It may also help to come to the task slowly, starting with asking for little. Then, catchey.
I started a new chat, to forget our unfortunate history, and asked to get the names only. Next request was to put the names into a table and add a column for email. It worked; Scraper even parsed the names into the first and last, omitting degrees and middle initials, and fixed masked emails (like <first dot last at company>).
From playing with Scraper, here are some conclusions:
ChatGPT is excellent at cleaning up data – a frequent task for those who work with professional profiles.
ChatGPT Scraper is more of a toy tool at the moment, I think. It works well to summarize pages. But when you need data collected:
Have you found plugins you use and like?
Registration has opened for my now-seven-day
Talent Sourcing Bootcamp in September
SEPTEMBER 5TH TO 8TH & 12TH TO 14TH (8 AM TO 9 AM PDT EACH DAY).
We will dedicate a full session to ChatGPT and AI in sourcing and recruiting. I hope you will join me!
Seating is limited.
[EDITED]: for updated information, please go to Github Syntax and the LUSOG Tool Release.
Hiring Software Developers? This awesome tool, created by our IT consultant, was the highlight of my presentation at #sosutech. Its purpose is to collect user profile data into a table. Here is how to make it yours.
1. Copy https://docs.google.com/spreadsheets/d/1sdOD4zGjg_rKyAElE53kZuRgbqx4QAgKFnS6u9vYlGo/edit#gid=0 to your Drive
2.Generate a free API token at https://github.com/settings/tokens
3. Try to run (any) script and give it permission to run
Now you can search for users with the location: and language: operators and populate the table:
Another function allows you to get user names and other profile information from a list of email addresses.
Enjoy!