apple-purchase-receipt-verifier
Verify Apple in-app purchases locally — no calls to Apple's servers.
Replaces the deprecated verifyReceipt endpoint by validating StoreKit 2
signed JWS transactions and legacy PKCS#7 receipts against pinned Apple
root certificates.
pip install apple-purchase-receipt-verifier
from apple_purchase_receipt_verifier import ReceiptVerifier, JwsVerifier, apple_receipt_roots
# Legacy PKCS#7 app receipt
receipt = ReceiptVerifier(apple_receipt_roots(), "com.example.app").verify(receipt_b64)
print(receipt.receipt_type, len(receipt.in_app_purchases))
# StoreKit 2 signed transaction
transaction = JwsVerifier(apple_jws_roots(), "com.example.app").verify_transaction(jws)
print(transaction.product_id, transaction.expires_date)
The import package is apple_purchase_receipt_verifier; the distribution is
apple-purchase-receipt-verifier. Requires Python 3.9+.
Why offline
Signature verification cannot fail because a vendor endpoint is down, so a purchase can be honoured immediately and reconciled against the App Store Server API afterwards. Refunds and revocations still need that reconciliation pass — a signature proves what Apple signed, not what happened since.
This is one of four implementations (Java, Node, Python, Swift) that share a single fixture suite, including Apple's own official test fixtures, and are required to agree byte for byte. See the project README for the full picture and COMPARISON.md for how it differs from Apple's official libraries.
Licence
MIT — see LICENSE.
Release files for apple-purchase-receipt-verifier 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| apple_purchase_receipt_verifier-0.1.1.tar.gz | 19.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| apple_purchase_receipt_verifier-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.8 kB
Release files / apple_purchase_receipt_verifier-0.1.1.tar.gz
| Download URL | apple_purchase_receipt_verifier-0.1.1.tar.gz |
|---|---|
| Size | 19.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8df6dc66451fcc74dd137e21e3c844c5a943b1639609512b1436305a3fcb610a
|
|
BLAKE2b-256 checksum How to use checksums |
4b993082a240c22b79b234bb3b741e3d32a3d4cd13a9d0dfacf2f9cb469b0c06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / apple_purchase_receipt_verifier-0.1.1-py3-none-any.whl
| Download URL | apple_purchase_receipt_verifier-0.1.1-py3-none-any.whl |
|---|---|
| Size | 19.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ca4a4e4987f152f24916137372c8282e69c3260ca45ca9000668aa67f52e5c8
|
|
BLAKE2b-256 checksum How to use checksums |
0bda43842a9b581244fc4e9cd565e144e7f0a23c0a51fc1a9ce2bc2672665e65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency log