A green checkmark next to a PyPI project URL means PyPI saw that you controlled it when you uploaded release files. It is not rechecked later and it does not mean the linked site is safe. You add URLs in the project.urls table, and a Security label can point to your reporting page.
How verification works
PyPI's documentation says project URLs are verified at upload time and not checked again. A verified URL gets a green checkmark, and the page warns that this proves control of the URL only at that moment. The site behind it can change afterward.
Which URLs can be verified:
- Links to the project's own page on PyPI.
- With trusted publishing from GitHub Actions: the repository URLs, their subpaths, the
.gitURL and the project's github.io pages. - With trusted publishing from GitLab CI/CD: gitlab.com repository URLs, subpaths and the
.gitURL. - With ActiveState: project URLs on platform.activestate.com.
- Google Cloud: no Google-specific URLs are currently verified.
So the easiest way to get a verified repository link is to publish through trusted publishing. See how to set up a trusted publisher on GitHub Actions.
Adding the URLs
Project URLs live in the project.urls table of pyproject.toml. The Python Packaging guide says labels with spaces must be quoted, and that well-known labels let tools show the link with the right meaning.
[project.urls]
Homepage = "https://example.com"
Repository = "https://github.com/me/mypackage"
Changelog = "https://github.com/me/mypackage/releases"
Security = "https://github.com/me/mypackage/security/policy"
PyPI says labels are arbitrary, but recognized ones, matched case-insensitively with aliases, get an icon. Its list of examples includes Homepage, Download, Changelog, Documentation, Bug, Funding, Security and Source.
The Security label
The PyPI page describes no dedicated security contact field. The closest feature is the Security label, meant for a security policy or a page about reporting vulnerabilities. For a solo maintainer that is the cheapest way to tell researchers where to go. Point it at a SECURITY.md or at GitHub's private reporting page. Our posts on enabling private vulnerability reporting and SECURITY.md versus security.txt cover the destination.
What buyers and users should take from the badge
Treat the checkmark as one weak signal among several:
| Signal | What it tells you | What it does not |
|---|---|---|
| Verified URL | Uploader controlled that link at upload | Link is safe, or still controlled |
| Trusted publishing | Upload came from a named workflow | Code is free of flaws |
| Release history | Cadence and age | Maintainer intent |
Our guide to what attestations on PyPI prove goes further on the second row.
Quick check
Is a verified URL rechecked after upload?
No. PyPI says verification happens at upload time and is not repeated.
Is there a security contact field in PyPI metadata?
The docs describe none. The Security label for a project URL is the closest option.
Sources
Last reviewed: 19 October 2026.