Open-source project
zapplyjobs/awesome-ml-internships avatar
zapplyjobs/awesome-ml-internships

awesome-ml-internships is four files with no licence, and every apply button routes through one site

Live AI and machine learning internships for students, refreshed through the Zapply job pipeline.

463 stars39 forksUnknownLicense varies

At a glance

What is it?
A generated table of 2027 AI and machine learning internships, refreshed by a commercial job pipeline, with sponsorship flags and posting ages. It is useful as a lead list and has real limits: no licence, no direct application links, and a page that is partly a pitch for an application autofill extension.
Who is it for?
This fits a student or new graduate who wants a broad, current sweep of 2027-season AI internships with an at-a-glance sponsorship flag, and who is willing to treat it as leads rather than as an application portal. It does not fit anyone who needs the underlying data to be reusable or the applications to be direct.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
GitHub does not report a main language for this repository.

Answers come from the project's GitHub data, last synced on October 21, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • zapplyjobs/awesome-ml-internships463 ★ · +12
Star history
Repository2026-08-232026-10-21
zapplyjobs/awesome-ml-internships451463

12 Stars in the last 59 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The repository is four directories and contains no licence file

Start with what is actually in the repository, because it constrains everything else.

The top level holds four entries: .github/, README.md, images/, and public/. There is no source directory, no package manifest, no script that generates the table, and no LICENSE file. The detected primary language is recorded as unknown, and the licence as unknown too.

So the GitHub repository is a hosting location for a rendered page and its assets, not the pipeline that produces them. The description says the listings are refreshed through the Zapply job pipeline, and the homepage recorded in the metadata is softwarejobs.dev with a referral parameter attached.

The licence gap is the part with consequences. A list of job postings is arguably a compilation rather than original work, but nobody has said so in writing, and there is no file to point at. If you wanted to build a scraper or a filter on top of this list and redistribute the result, that question has to be settled by the operator rather than assumed.

Maintenance dates are healthy by comparison. The repository is not archived and the last push is dated 2026-10-01, with no releases.

The 2027 season is what the page targets, which is consistent with a list refreshed continuously rather than published annually.

Every apply link is the aggregator's own URL with a campaign parameter

The Apply column is not a set of employer links, and understanding that changes how you use the table.

Every button points at zapply.jobs with a path segment that looks like an identifier, followed by a query parameter carrying the campaign name, gh-awesome-ml-internships-2027. So a click from this README is attributable to this README, and the destination is the aggregator's page rather than the employer's application form.

The identifiers are more revealing than the URLs. They encode which applicant tracking system each posting came from, and the list covers most of the common ones: greenhouse-pinterest-8138090, workday-adobe-external-experienced-R171519, microsoft-200042197, bytedance-7675478684795881781, and amazon-de9fd61c-eb9b-488f-aac1-e0675b4e88fc, where the Amazon entries are plain UUIDs rather than a system name.

One entry is a small surprise in that scheme. The Honeywell co-op links through an identifier beginning oracle-honeywell, which reflects Oracle's system being the host behind that employer's careers page rather than anything about the role.

For a reader, the practical effect is that you cannot submit from the table. You go through one intermediate page per job, and the freshness of that page is only as good as the pipeline's refresh.

The Posted column mixes hours, days and an explicit unknown

Freshness is presented as a relative age rather than a date, which is compact and lossy.

The values in the visible rows run 11h, 15h, 16h, 1d, 2d and 3d. That is fine for scanning the top of a list, but it means two things follow from the design.

First, an age of 15h cannot be turned back into a posting date once you read it, so you cannot tell whether a role has been open for a day or was merely ingested today.

Second, and more usefully, the table is honest about its own gaps. The three ByteDance rows at the top of the Machine Learning and AI Engineering section read Date unknown rather than guessing. Those are the three most specific roles listed, including a PhD-only machine learning engineering position in e-commerce risk control and a PhD-only research scientist position in distributed NoSQL database systems.

So a blank or a stated unknown is a real signal that the pipeline did not obtain a date from the source, rather than a formatting artefact. The Visa column uses the same convention, with a present value or nothing at all.

One caveat on the hours values: they are relative strings generated at render time, so a reader who returns to the page later sees different numbers for the same rows.

Sponsorship is a per-row flag, and a blank is not a no

The Visa column carries a sponsor marker on most rows and nothing on a few, and the difference matters.

Rows marked as sponsoring include the two Pinterest internships, the Waymo roles, Adobe, Boeing, TD Synnex, General Motors, Microsoft, three Amazon applied science internships, Cigna, Nike, Honeywell and Lyft. Several of those are PhD-labelled roles, which is a pattern rather than a coincidence.

The rows with the column empty are Crowe in Chicago, Q2 in Cary, ICF in Reston, and Moog in Buffalo. What the table does not do is distinguish between a role that does not sponsor and a role whose sponsor status was not captured.

That distinction is the one to keep in mind. An empty cell reads as a negative in a table like this, and it is not reliably one. Four rows is a small enough number that reading each posting directly is reasonable, and it is a better use of time than treating the marker as a filter.

The same caution applies in reverse to the marker itself. Sponsorship terms vary by country and by office, and a single boolean per row cannot carry that. The column is a screening aid rather than an answer.

Titles and locations are truncated mid-word to fit the table

The table is rendered at a fixed width, and the truncation is visible in the data rather than hidden behind a tooltip.

Several ByteDance and Amazon role titles end in an ellipsis followed by a trailing hyphen, as though a fragment of the original string were kept. The Visual Generation and Multimodal Evaluation role ends with 2027..., and the three Amazon applied science roles end with -... .

Locations are cut the same way. The Johnson & Johnson co-op in Titusville reads New Jersey, United..., and both General Motors autonomous vehicle simulation roles in Sunnyvale read California, United... .

The longest case is TD Synnex, where the title runs into a bulleted list of tracks inside a table cell, showing Information Technology followed by a bullet character and then an ellipsis.

The Boeing row truncates mid-title as well, keeping Engineering & Technology Innovation Graduate Researcher Program, Software Engineering... .

For a list this is a reasonable trade, since the employer name is what most people scan for. But it does mean the title column cannot be trusted for anything that requires exact wording, and it is a second reason to treat the page as a lead list rather than a record.

Company names are the one element styled consistently, each in bold, which is the correct priority given how the list is read.

Above the jobs table, the page is a pitch for an application autofill extension

The README title is AI & Machine Learning Internships 2027, but the content before the first job row is product marketing.

A Website and Autofill Extension section links to an onboarding page on app.zapply.jobs with a referral parameter, and promotes four things: a Chrome extension that autofills job applications in seconds, a dedicated job board, user accounts with multiple profiles for different resume types and roles, and job application tracking with streaks and commitment awards.

Streaks and commitment awards are the giveaway. A repository of open educational resources is not where gamified application tracking belongs, and this README is not that. It is a funnel whose top-of-funnel artefact happens to be a public list.

There is also a community section linking a Discord server and a LinkedIn company page, described as a growing network of fellow students and new graduates.

None of that makes the list worse, and a maintained public list is genuinely useful. It does mean the incentives are not obviously aligned with a reader who wants an open dataset. A pipeline that refreshes through a commercial service is optimising for signups, and the table is the bait.

So read the rows, and treat the surrounding page as an advertisement.

Degree level is encoded in the job title, not in a column

There is no column for seniority, degree level or employer size, so those distinctions have to be read out of the role name.

The clearest cases are PhD-only by title. ByteDance lists a Machine Learning Engineer Intern in E-Commerce Risk Control for a 2027 start with PhD in the title, and a Research Scientist Intern in Distributed NoSQL Database Systems likewise. Waymo has a PhD planner machine learning role and a PhD machine learning research role covering planning and prediction, both separate from its MS and PhD driver refinement foundations role.

Pinterest splits its two rows cleanly: one Master's Machine Learning Internship 2027 and one PhD Machine Learning Internship 2027, in the same office, posted at the same time. That pair is a good illustration of why the distinction matters and why it deserves its own filter.

General Motors runs the same pattern with two autonomous vehicle simulation internships, one labelled for PhD and one not.

Microsoft phrases it by audience instead of degree, describing AI, machine learning and large language model intern opportunities for university students.

Boeing, by contrast, uses the phrase Graduate Researcher Program, which is a different track from an internship and would be missed by an intern-only filter.

Editorial conclusion

This fits a student or new graduate who wants a broad, current sweep of 2027-season AI internships with an at-a-glance sponsorship flag, and who is willing to treat it as leads rather than as an application portal. It does not fit anyone who needs the underlying data to be reusable or the applications to be direct. Three things to know before you rely on it. There is no licence and no licence file, so the list cannot be redistributed with confidence. Every apply link routes through the aggregator's own domain with a campaign parameter, so nothing here is a direct employer URL. And three rows show their posting date as unknown, which means the freshness ordering is incomplete rather than complete. The last push is dated 2026-10-01 and the repository is not archived.

Frequently asked questions

What is awesome-ml-internships?

A GitHub repository containing a README with a generated table of AI, machine learning and data science internships for students, targeting the 2027 season and refreshed through the Zapply job pipeline. Each row gives company, role, location, posting age, visa sponsorship and an apply link, grouped into collapsible sections.

Can I apply to these jobs directly from the table?

Not straight to the employer. Every apply link points at zapply.jobs with an identifier and a campaign parameter naming this README, so each click routes through the aggregator's own page. The identifiers reveal the source applicant tracking system, such as Greenhouse, Workday or Oracle, rather than being employer application URLs.

What does the Visa column mean in awesome-ml-internships?

Most rows carry a sponsor marker and some are blank. Crowe, Q2, ICF and Moog are blank in the visible rows. A blank means the status was not captured rather than that the role does not sponsor, so the column works as a screening aid and not as a filter.

Is the data in awesome-ml-internships licensed for reuse?

No licence is stated and no LICENSE file is present in the repository, which holds only .github, README.md, images and public. The detected language and licence are both recorded as unknown, so reuse of the compiled list has to be cleared with the operator.

How current are the postings in awesome-ml-internships?

The Posted column carries relative ages such as 11h, 15h, 1d, 2d and 3d rather than dates, and three ByteDance rows read Date unknown. The repository is not archived and its last push is dated 2026-10-01, so the page is refreshed continuously even where a specific posting age could not be determined.

Does awesome-ml-internships filter by degree level?

No. There is no column for degree level, so it is encoded in the job title, as with the ByteDance PhD roles, the Waymo PhD planner and research roles, and Pinterest's separate Master's and PhD internships in San Francisco. Boeing uses the Graduate Researcher Program wording instead, which an intern-only filter would miss.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/zapplyjobs-awesome-ml-internships.svg)](https://hysenlabs.com/projects/zapplyjobs-awesome-ml-internships)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/zapplyjobs-awesome-ml-internships.svg)](https://hysenlabs.com/projects/zapplyjobs-awesome-ml-internships)