2025 Employer Database Update

Submitted by Todd Smith on 20 November, 2025.
Teaser image
Biotech Companies World Wide
Article Content

Time for our annual employer database update*, when we review the nearly 10,000 organizations in the Biotech-Careers.org database to determine who is still active, who has rebranded, who was acquired, and who has disappeared. We also update (or remove) links to employers’ career and internship pages based on what we find**.

This is also the time when I’m reminded that way too many biotech companies say essentially the same thing:

“We’re an innovative, leading company addressing unmet needs to improve patients’ lives.”

This message is often paired with a large, generic image—patients, DNA, chemicals, or scenic nature — that poorly communicates what the company does.

Biotech is an innovation-driven industry that tackles hard problems with high uncertainty, so there’s inevitably a lot of churn. Some of this churn may even stem from poor communication and branding. 

The update process involves a mix of automated and manual review. Many companies with non-informative homepage messages still have useful content buried in About, Science, Technology, or Pipeline pages, so we dig deeper to better represent the biotech sector to our audiences.

The automated part (see workflow below) has four steps:

  1. Break a long comma-separated value (CSV) list of 9,993 company names, URLs, and database IDs into manageable groups of 1,000 in 10 CSV files.
  2. Test each URL with an HTTP request. If the URL loads OK, the site is scanned for career or internship pages. If found, the links are written to an Excel spreadsheet along with the company’s name, URL, and database ID, and a status code (has job page or has internship page) is set to 1. If no career or internship page is found, the company’s name, URL, and database ID, with the respective status codes set to 0, are written to the spreadsheet.
  3. If the URL fails, write the company’s name, URL (as an active link), ID, HTTP response code, redirected URL, and error messages to a separate “failures” sheet, which also includes fields for rebranded names, notes, and a prebuilt Google search link to support manual review.
  4. Convert the career-link spreadsheet to CSV and use it to update the Biotech-Careers.org database.

The failures spreadsheet is then manually reviewed, annotated, and used to update the database—a slow but essential step.

Companies that no longer exist, or those acquired by organizations already in the database, are unpublished. For companies acquired by organizations not yet in the database, we update the name and URL and review them later. Rebranded companies are handled similarly.

Many organizations change their URLs—sometimes simply switching from http to https, sometimes adopting entirely new domains. A surprising number fail to set up redirects, leaving old links broken. In some cases, the discarded domain now points to domain sales sites, gaming sites, or adult content—not ideal for a biotech company.

A small number of false negatives arise from websites that block automated access, load slowly, or use intrusive cookie pop-ups. Biotech has some excellent science hidden behind some truly frustrating websites.

In total, 1,232 companies were unpublished and 1,366 remained published, with 1,162 of those receiving updates. The table below summarizes the HTTP request failures. It is followed by a diagram summarizing the workflow process. Of the 7395 companies that "passed,"  4902 were found to have career pages and 124 have internship pages. They can be found on the Biotech Jobs page. 

Types of errors, counts, and actions (unpublished, published)
Error TypeUnpublishedPublishedTotal
Acquired by employer in db4850485
Acquired by employer not in db0140140
False negative0204204
New URL0824824
Rebranded0198198
Website gone7470747
Total123213662598

 

* This year's update was a bit (two years) behind schedule. 
** The "finding" is done by a Python script the uses the Beautiful Soup web scraping library. Career and internship pages are found by searching for <a> tags that include one of ('career', 'careers', 'jobs', 'join us', 'work here', 'hiring', 'current openings', 'job listing', 'joinus', 'workhere', 'join-us','work-here', 'work-at', 'job-listing', 'apply-here', 'apply here') for career pages and ('internship', 'interns') for internship pages.

Mermaid diagram

Employer Database Update Workflow

flowchart TD A([Start<br/>Input: List of URLs<br>9,993]) B[[Split into groups of 1,000]] C(For each group) D(For each URL) E{Error?} F{{Career or Internship Page?}} G(Set status = 1<br/>Write link to careers sheet) H(Set status = 0) I{{More URLs?}} J(Write URL to errors sheet<br/>Capture redirects) K{{More groups?}} L([End<br>8,761]) A --> B --> C --> D --> E E -->|No| F E -->|Yes| J F -->|Yes| G --> I F -->|No| H --> I J --> I I -->|Yes| D I -->|No| K K -->|Yes| C K -->|No| L %% Classes classDef green fill:#ccffcc,stroke:#333,stroke-width:1px; classDef blue fill:#cce5ff,stroke:#333,stroke-width:1px; classDef orange fill:#ffe5cc,stroke:#333,stroke-width:1px; %% Apply class A,L green; class B,C,K blue; class D,E,F,G,H,I,J orange;
The overall process, with script updates, site visits, and manual review, takes close to 40 hours.

Key

flowchart LR subgraph "Entity types" oval(["Input/Output"]) doubleSidedRectangle[["Process"]] group(group) hexagon{{"Decision"}} rectangle("Process Step") end