USPTO Trademark Watch: New Filings Leads & Brand Alerts
Pricing
from $3.00 / 1,000 new filings
USPTO Trademark Watch: New Filings Leads & Brand Alerts
Daily USPTO trademark filings as scored DTC brand leads, plus brand-watch alerts for look-alike marks, oppositions and status changes.
Pricing
from $3.00 / 1,000 new filings
Rating
0.0
(0)
Developer
Carina Hatton
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Watches the public USPTO trademark search index and gives you two things:
- New-filings lead feed. Fresh US trademark applications, filtered by keyword, class, owner, state, entity type, filing basis and date. Each filing gets a transparent DTC lead score that marks likely early-stage consumer brands.
- Brand-watch alerts. New filings and newly published marks that look or sound like the marks you watch, each with a similarity score and plain-English reason. You also get status-change alerts (published for opposition, registered, abandoned, other status changes) for serials you track. Alerts include the 30-day opposition deadline.
Results are de-duplicated across runs, so a scheduled daily run only returns what is new. There is an optional Slack or webhook digest.
Source: USPTO. Data comes from the USPTO's public Trademark Search system (tmsearch.uspto.gov) and TSDR status pages. This Actor is not affiliated with or endorsed by the USPTO. Similarity scores are a screening aid, not legal advice and not a likelihood-of-confusion opinion. Ask a trademark attorney before acting on an alert.
What it does
New-filings feed (mode: newFilings) | Brand watch (mode: brandWatch) | |
|---|---|---|
| Scans | Applications filed in your date window | Same window, plus marks published for opposition in the last N days, plus your watched serials |
| Output | One filing row per new application | One watchAlert row per new match or status event |
| Ranking | DTC lead score (0–100) with reasons | Similarity score (0–100) with reasons |
| Charged event | new-filing | watch-alert |
mode: both runs both in one pass and shares the same scan.
Quick start
Lead feed: yesterday's apparel and cosmetics filings from small US brands
{"mode": "newFilings","lookbackDays": 2,"classes": ["3", "25"],"countries": ["UNITED STATES"],"minLeadScore": 70,"maxResults": 200,"profileId": "daily-dtc-feed"}
To add public contact details, set "enrichContacts": true and "maxEnrichments": 25. Enrichment is off by default and is charged per successful lookup.
Brand watch: alert me about look-alike or sound-alike marks
{"mode": "brandWatch","lookbackDays": 7,"watchMarks": [{"mark": "YOURBRAND", "classes": ["3", "25"], "label": "Client A", "ignoreOwners": ["Your Company LLC"]}],"similarityThreshold": 80,"oppositionWatch": true,"oppositionLookbackDays": 7,"watchSerials": ["50001046"],"slackWebhookUrl": "https://hooks.slack.com/services/..."}
Schedule either input daily, keeping the same profileId. Each run then returns only filings and alerts it has not delivered before. Use "mode": "both" to run the feed and the watch in one pass.
Input highlights
- Date window. Set
lookbackDays(default 3), or setdateFrom/dateTo(YYYY-MM-DD, US Eastern). The maximum range is 92 days. - Feed filters:
keywords(whole word, in the mark or in the mark plus goods/services) andexcludeKeywords;classes(e.g."25"),owners,states(codes or names),countries;entityTypes,filingBases(1a,1b,44d,44e,66a),proSeOnly,minLeadScore,maxResults.
- Brand watch:
watchMarks:[{"mark": "GLOWLAB", "classes": ["3"], "label": "Client A", "ignoreOwners": ["Glowlab"]}];similarityThreshold(default 80);oppositionWatchwithoppositionLookbackDays;watchSerials;trackStatusOfMatches, which adds matched serials to status tracking automatically.
- De-dupe.
onlyNew(default on) uses a named key-value store (stateStoreName) with one state record perprofileId. Use a differentprofileIdfor each client or watch list. - Contact enrichment (
enrichContacts) is off by default. When on, it fetches the public TSDR status page for up tomaxEnrichmentsfilings (optionally only those withenrichMinLeadScoreor higher). It adds the attorney name and email, the correspondent name and email(s), the phone, and the TM5 status. Mailing and domicile addresses are never output. - USPTO API key (
usptoApiKey, optional and secret). If you provide one, enrichment uses the TSDR API (tsdrapi.uspto.gov) instead of public status pages. - Digest.
slackWebhookUrl(Slack incoming webhook) and/orwebhookUrl(receives JSON). The digest contains no emails or phone numbers. - Politeness.
requestIntervalSecs(default 1.0, minimum 0.5) sets the minimum gap between USPTO search requests. Enrichment waits at least 1.5 s between status pages. Requests back off on 429/5xx errors and honourRetry-After.
Output
Everything goes to the default dataset, with recordType set to filing or watchAlert. The dataset has three views: Leads, Watch alerts and Overview. A RUN_SUMMARY record in the default key-value store holds counts for the run.
Example filing row (real record from a local test run; identifying fields shortened):
{"recordType": "filing","serialNumber": "50185733","mark": "SEDUCED","filedDate": "2026-10-28","classes": ["025"],"ownerName": "SEDUCED LLC","ownerEntityType": "LIMITED LIABILITY COMPANY","ownerCity": "Albuquerque","ownerState": "NM","ownerCountry": "UNITED STATES","isProSe": true,"filingBasis": ["1b"],"leadScore": 85,"leadScoreReasons": ["consumer-product class 025 (apparel/footwear)", "US-based owner","LLC or individual owner (small-brand profile)", "filed without an attorney of record","intent-to-use basis (likely pre-launch)", "word mark present"],"tsdrUrl": "https://tsdr.uspto.gov/#caseNumber=50185733&caseType=SERIAL_NO&searchType=statusSearch","source": "Source: USPTO"}
Example watchAlert row:
{"recordType": "watchAlert","alertType": "STATUS_CHANGE","serialNumber": "50001046","mark": "HMU","previousStatus": "APPROVED FOR PUBLICATION","status": "PUBLISHED FOR OPPOSITION","publishedForOppositionDate": "2026-10-20","oppositionDeadline": "2026-11-19","matchReason": "status: APPROVED FOR PUBLICATION -> PUBLISHED FOR OPPOSITION","source": "Source: USPTO"}
Alert types:
SIMILAR_FILINGSIMILAR_PUBLISHED_FOR_OPPOSITIONPUBLISHED_FOR_OPPOSITIONREGISTEREDABANDONEDSTATUS_CHANGE
How the scores work
DTC lead score (capped at 100). Each reason is listed on the row:
- +30 for a consumer-product class: 003, 005, 009, 014, 018, 020, 021, 024, 025, 028, or 029–034;
- +10 for class 035 when the goods text mentions online retail or e-commerce;
- +15 for a US-based owner;
- +10 for an LLC or individual owner;
- +15 for no attorney of record;
- +10 for an intent-to-use (1b) basis;
- +5 for more than one class;
- +5 when a word mark is present.
"No attorney of record" is a proxy for pro se filings, based on the attorney field in the search index.
Similarity score. The Actor takes the highest of these signals:
- an exact match after normalisation (punctuation, stopwords like THE/CO/LLC, and digit-to-letter swaps are stripped);
- the watched mark appearing inside the candidate, or the reverse;
- Jaro-Winkler and Levenshtein spelling similarity;
- a simplified phonetic key (very short keys only count when the spelling is also close);
- token-level near matches.
If you set classes on a watch mark and the candidate shares none of them, the score is multiplied by 0.7.
Pricing (pay per event)
You pay only for the events below. All prices are in USD.
| Event | When it is charged | Price |
|---|---|---|
run-start | Once per run | $0.005 |
new-filing | Per new filing row delivered in the lead feed | $0.003 |
contact-enrichment | Per filing where a public TSDR contact lookup succeeded (opt-in) | $0.004 |
watch-alert | Per brand-watch alert row (similar filing, similar mark published for opposition, or a status change on a watched serial) | $0.05 |
- Filings already delivered to the same
profileIdare not delivered or charged again. Failed contact lookups are not charged. - Set a maximum cost per run in the run options. The Actor stops cleanly when it reaches that cap, and only filings it actually delivered are marked as seen, so the next run picks up the rest.
- Example arithmetic from the prices above: one run that delivers 100 new filings with 10 contact lookups costs $0.005 + 100 × $0.003 + 10 × $0.004 = $0.345.
- On the first run of a new watch profile, marks you track that are already published or have recently changed status can produce several alerts at once.
Measured data (test runs, 2026-10-30)
These are counts from the USPTO search index, as observed on 2026-10-30:
-
Applications by filing date: Oct 23: 2,135; Oct 26: 2,274; Oct 27: 2,453; Oct 28: 2,402; Oct 29: 2,408. Weekend days are lower (Oct 25: 626).
-
Filings appear about one day after the filing date.
-
Marks published for opposition from Oct 23 onward: 10,787 (the Oct 27 Official Gazette).
-
A one-day feed limited to classes 3 and 25 returned 357 filings from 1 search request in about 5 s.
-
A 7-day brand watch (5 marks, 12,813 filings scanned, plus the 10,787-mark opposition scan) took 52 search requests and about 98 s.
-
On the Apify platform at 512 MB, a one-day class-25 feed capped at 50 rows took 6.0 s. A 3-day brand watch with 3 marks (7,263 filings scanned plus the 10,787-mark opposition scan) took 62.9 s.
Your timings will vary with USPTO load and the request interval.
Disclaimer
- Source: USPTO. The data comes from public USPTO records.
- This Actor is not affiliated with, endorsed by, or sponsored by the United States Patent and Trademark Office.
- Similarity scores and alerts are an automated screening aid and not legal advice. Talk to a trademark attorney about oppositions, clearance or enforcement.
Privacy and responsible use
- Domicile, home and mailing addresses are never output. Only the city, state and country come from the search index.
- Free-text owner fields are scrubbed of email addresses. Contact details appear only when you turn enrichment on, and they come from the USPTO's public record.
- If you contact applicants, follow anti-spam law (for example CAN-SPAM) and USPTO guidance on solicitations. Do not imply any USPTO affiliation.
Local development
python -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt pytestpython -m pytest -q # unit tests (offline)apify validate-schemaACTOR_TEST_PAY_PER_EVENT=true apify run # uses storage/key_value_stores/default/INPUT.jsonpython tests/mock/mock_webhook.py 18766 /tmp/received.jsonl # local digest receiver