CPSC PGA message set generator
Send the Certificate of Compliance data you already hold. Get back a validated CPSC Full PGA Message Set | fixed width, filing order, every field in the position the CATAIR publishes | plus a named list of everything that would fail before you file it.
The PGA Message Set cannot be filed on its own. It has to ride inside a valid ACE transmission, so the filer | a broker, or an importer filing their own entry | carries the obligation to submit CPSC certificate data. That data normally sits with the importer's supplier, not with you, and it arrives as a PDF, a spreadsheet or an email. This turns it into the record set your filing software expects.
See a real message set
No signup, no key. The generator is live | fetch a worked example and read the actual records:
curl -s "https://entryready.app/api/v1/pga?sample=1"Each record is exactly 80 characters, in filing order: PG01001CPSCPSFCP SRV 00850001234567 is PG01, line 001, agency CPS, program CPS, processing code FCP, a GTIN. Open the sample.
What comes back
- OI | Commercial line-item description, one per entry line
- PG01 | Agency CPS / program CPS, processing code FCP (children's) or FGC (general), GTIN or UPC, intended-use code
- PG02 | Item type P with your own product code (SKU)
- PG07 | Trade/brand name, product name, manufacture date as MMCCYY, item identity
- PG10 | CPSC commodity line (qualifier PC9) plus model colour, description or style
- PG19 | One per entity with its role code: CE, ITL, LAB, MF, NOL or PK
- PG20 | That entity's address: city, state/province, country, postal code
- PG21 | That entity's telephone and email
- PG22 | The certification declaration, CPY or CPN
- PG60 | Citations for the rules tested to
Field positions, lengths and code values follow the CBP CATAIR CPSC eFiling Beta Pilot Implementation Guide v2.5 and its appendices. Records we generate are covered by automated conformance tests that assert every field position against that guide.
Integrate it
One POST, either your own draft shape or flat fields:
curl -s -X POST "https://entryready.app/api/v1/pga" \
-H "Content-Type: application/json" \
-d '{
"cert_type": "CPC",
"product_name": "Cloud Bunny Plush",
"product_id": "00850001234567",
"id_type": "GTIN",
"description": "Plush stuffed bunny toy for infants",
"citation_codes": ["16 CFR 1250", "ASTM F963-23"],
"manufacture_date": "2026-06-18",
"manufacturer": {"name": "Ningbo Sunshine Toys Co Ltd", "address": "88 Haishu Road, Ningbo, Zhejiang 315000, CN", "contact": "+86 574 8888 1234"},
"test_lab": {"name": "Bureau Veritas Consumer Products", "address": "100 Northpointe Parkway, Buffalo, NY 14228, US", "contact": "kids-labs@bureauveritas.example"},
"point_of_contact": {"name": "EntryReady Records", "address": "PO Box 1234, Brisbane, QLD 4000, AU", "contact": "records@entryready.app"},
"options": {"sku": "ER-BUNNY-01", "brand_name": "Diamond Baby", "cpsc_lab_id": "1234"}
}'Add ?format=txt and the same response comes back as a flat file, one record per line, ready to hand to a filing system or import into your own tooling.
Validation, not just generation
Every pack is checked before it is returned, and each failure is named rather than silently dropped:
- Missing or malformed certificate elements, named per element
- A manufacture date that cannot be expressed as the required MMCCYY, which blocks the record
- A test lab with no CPSC-accepted lab ID | emitted as LAB rather than ITL, and flagged, because a children's certificate is expected to rest on testing at an accepted lab
- An address that cannot be split into city, state and postal code, which PG20 requires
- An intended-use code left at the 130.000 base because the age grade is not in the data
Where the guide is genuinely ambiguous we say so in the response instead of guessing | for example PG60 citations sit outside the required record set, so that is surfaced as a review item for your filer to confirm.
Pricing
Priced per message set | one product on one entry. Not per seat, not per entry, and nothing extra to rebuild a set when the certificate changes.
- US$3.00 per message set, pay as you go. First five free.
- US$2.00 each from 100 a month · US$1.25 from 1,000 · US$0.75 from 10,000
Importer plan
US$49/month
- 25 message sets a month included
- Then US$2.00 for each extra set
- Every field checked against the published CATAIR positions
- Missing or unsupported data named, not guessed
Billed monthly, cancel any time. We email your API key after you subscribe.
Broker plan
US$499/month
- 500 message sets a month included
- Then US$1.00 for each extra set
- Run it per entry, per client, or straight from your own software
- Every field checked against the published CATAIR positions
Billed monthly, cancel any time. We email your API key after you subscribe.
For scale: a broker typically charges about US$35 for a PGA form on an entry, and keying certificate data by hand takes an entry writer 20 to 35 minutes. That is worth roughly US$47 to US$55 per entry line in labour and fees before anything goes wrong. A message set here is US$3, it is checked field by field against the CATAIR, and whatever is still missing is named rather than left for you to find at the port.
Everything else on this site stays as it is: the rules check is free, the US$99 audit is a one-off, and EntryReady Pro at US$29/month covers the cloud certificate vault.
What this is not
We do not file with CBP and we are not a customs broker. The generated set is a draft for a qualified filer to review and submit through their own ACE/ABI software. Outputs are not legal advice. Certificates remain the responsibility of the certifying party, and the importer of record retains the underlying test records.
Talk to us about volumeWhat brokers usually get wrong →
Not a broker? Check one product against the rules for free first | rules check | or have a single certificate reviewed and corrected: US$99 audit.