Safeguard
Developer Tools•

What do PyPI verified project URLs mean, and what is the Security link?

A green check on a PyPI project URL means control at upload time only. How verification works, how to add URLs in pyproject.toml, and the Security label.

Safeguard Security Team
3 min read

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 .git URL and the project's github.io pages.
  • With trusted publishing from GitLab CI/CD: gitlab.com repository URLs, subpaths and the .git URL.
  • 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:

SignalWhat it tells youWhat it does not
Verified URLUploader controlled that link at uploadLink is safe, or still controlled
Trusted publishingUpload came from a named workflowCode is free of flaws
Release historyCadence and ageMaintainer 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.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.