HTS Tariff & Trade Scraper avatar

HTS Tariff & Trade Scraper

Pricing

$9.00 / 1,000 tariff or trade change rows

Go to Apify Store
HTS Tariff & Trade Scraper

HTS Tariff & Trade Scraper

Track tariff and trade changes. Open Input → leave defaults → Start (1 tariff topic + 1 evidence row ≈ USD 0.009/row): https://console.apify.com/actors/f0A4d3ZshxCWxVJJN/input From USD 0.

Pricing

$9.00 / 1,000 tariff or trade change rows

Rating

0.0

(0)

Developer

naoki anzai

naoki anzai

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 days ago

Last modified

Share

Tariff Trade Change Digest | Federal Register + HTS Monitor

What you get: one digest row per tariff topic you watch, combining new Federal Register documents and USITC HTS lines: status (baseline / changed / action_needed), a summary of what is new, matched documents and HTS codes, and a recommended action, billed at $0.009 per row. With the default changed_only mode, a topic with nothing new writes no row.

Sample output from a real run (2026-10-18, Section 301 China tariffs topic):

topicNamestatusactionNeededsummarybilled
Section 301 China Tariffsaction_neededtrueHTS baseline captured for this topic. 4 new Federal Register document(s) matched the topic…$0.009

Open Input (leave defaults → Start) Paid first-run JSON ≈ USD 0.009/row (1 tariff topic + 1 evidence row). Keep reports, exports, and movement options bounded for the first run. Open Console Input (deep link above) and run this JSON.

{
"topics": [
{
"id": "section-301",
"name": "Section 301 China Tariffs",
"watchTerms": "section 301,chapter 99",
"useUstrContext": false,
"federalRegister": {
"agencySlug": "trade-representative-office-of-united-states",
"documentTypes": "NOTICE",
"keywords": "tariff",
"lookbackDays": 7
},
"hts": {
"searchTerm": "9903.88",
"htsCodes": "9903.88.01",
"maxMatches": 1
}
}
],
"lookbackDays": 7,
"maxDocsPerTopic": 1,
"maxHtsMatchesPerTopic": 1,
"maxPagesPerTopic": 1,
"includeUstrContext": false,
"notifyOnNoChange": false,
"datasetMode": "all",
"requestTimeoutSeconds": 15,
"delivery": "dataset",
"webhookUrl": "",
"snapshotKey": "tariff-p",
"dryRun": false
}

Paste topic and Start.

Managing international ecommerce logistics requires constant vigilance over Harmonized Tariff Schedule (HTS) codes and import regulations. This dedicated web scraper automatically monitors USITC HTS releases, USTR notices, and the Federal Register to extract crucial trade data directly from the source. When you run this scraper, it captures every new ruling, agency update, and document type, allowing you to quickly spot policy changes that might affect your supply chain costs or shipping margins.

Designed for ecommerce operations, freight forwarders, and procurement teams, this tool eliminates the need to manually browse dense government websites to search for details on changing import rules. You can easily schedule daily digests to scrape target keywords or specific commodity updates. The scraper navigates the official pages, pulls out the vital details, and structures the data into a clean, searchable format.

Every execution delivers precise outputs, including the issuing government agency, publication dates, official docket numbers, and direct URLs to the original notices. Automating your trade compliance workflow ensures you never miss a critical update. Whether you need to integrate tariff data into your logistics dashboards or track specific goods across federal publications, this data extraction tool keeps your operations compliant and informed.

Store Quickstart

Run this actor with your target input. Results appear in the Apify Dataset and can be piped to webhooks for real-time delivery. Use dryRun to validate before committing to a schedule.

Use with Apify MCP

Exact actor: taroyamada/tariff-trade-change-digest

Sample input JSON:

{
"topics": [
{
"id": "section-301",
"name": "Section 301 China Tariffs",
"watchTerms": "section 301,chapter 99,additional duties",
"useUstrContext": true,
"federalRegister": {
"agencySlug": "trade-representative-office-of-united-states",
"documentTypes": "NOTICE",
"keywords": "tariff"
},
"hts": {
"searchTerm": "9903.88",
"htsCodes": "9903.88.01,9903.88.03,9903.88.05",
"maxMatches": 10
}
}
],
"watchTerms": "ieepa,tariff actions",
"lookbackDays": 45,
"maxDocsPerTopic": 10,
"maxPagesPerTopic": 1,
"maxHtsMatchesPerTopic": 10,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "tariff-trade-section301-prod",
"notifyOnNoChange": true
}

Key Features

  • 🏛️ Government-sourced — Pulls directly from official agency feeds — no third-party aggregators
  • ⏱️ Timely digests — Daily/weekly rollups of new filings, rulings, or actions
  • 🔍 Keyword watchlists — Flag items matching your compliance/legal watch terms
  • 📊 Structured metadata — Agency, date, docket, document type, link — all dataset-ready
  • 📡 Webhook alerts — Push to legal/compliance teams the moment new items match watchlist

Use Cases

WhoWhy
DevelopersAutomate recurring data fetches without building custom scrapers
Data teamsPipe structured output into analytics warehouses
Ops teamsMonitor changes via webhook alerts
Product managersTrack competitor/market signals without engineering time

Input

FieldTypeDefaultDescription
topicsarrayrequiredOne entry = one digest row. Keep each topic narrow: one Federal Register query plus one focused HTS keyword and/or small
watchTermsstring—Comma-separated terms added to every topic for highlighting notices and context.
lookbackDaysinteger7Default lookback for Federal Register and USTR context filtering.
maxDocsPerTopicinteger20Upper bound on Federal Register documents returned for each topic.
maxPagesPerTopicinteger2Hard page cap for the Federal Register query. Keep low for recurring runs.
maxHtsMatchesPerTopicinteger15Default cap for HTS evidence rows when topic.hts.maxMatches is omitted.
deliverystring"dataset"dataset stores the digest JSON in the Apify dataset/local output. webhook posts the full payload to webhookUrl.
webhookUrlstring—Required only when delivery=webhook.

Input Example

{
"topics": [
{
"id": "section-301",
"name": "Section 301 China Tariffs",
"watchTerms": "section 301,chapter 99,additional duties",
"useUstrContext": true,
"federalRegister": {
"agencySlug": "trade-representative-office-of-united-states",
"documentTypes": "NOTICE",
"keywords": "tariff"
},
"hts": {
"searchTerm": "9903.88",
"htsCodes": "9903.88.01,9903.88.03,9903.88.05",
"maxMatches": 10
}
}
],
"lookbackDays": 7,
"maxDocsPerTopic": 20,
"maxPagesPerTopic": 2,
"maxHtsMatchesPerTopic": 15,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "tariff-trade-change-digest-state",
"includeUstrContext": false,
"requestTimeoutSeconds": 30,
"notifyOnNoChange": true,
"dryRun": false
}

Input Examples

Example: Section 301 topic, every run

{
"topics": [
{
"id": "section-301",
"name": "Section 301 China Tariffs",
"watchTerms": "section 301,chapter 99,additional duties",
"useUstrContext": true,
"federalRegister": {
"agencySlug": "trade-representative-office-of-united-states",
"documentTypes": "NOTICE",
"keywords": "tariff"
},
"hts": {
"searchTerm": "9903.88",
"htsCodes": "9903.88.01,9903.88.03,9903.88.05",
"maxMatches": 10
}
}
],
"datasetMode": "all",
"notifyOnNoChange": true,
"snapshotKey": "section-301-digest"
}

Example: Your own topic (Section 232 steel), 30-day lookback

{
"topics": [
{
"id": "section-232-steel",
"name": "Section 232 Steel & Aluminum",
"watchTerms": "section 232,steel,aluminum",
"federalRegister": {
"keywords": "section 232 steel"
},
"hts": {
"searchTerm": "9903.81",
"maxMatches": 5
}
}
],
"lookbackDays": 30,
"datasetMode": "all",
"notifyOnNoChange": true,
"snapshotKey": "section-232-watch"
}

Example: Recurring watch with its own snapshot

{
"topics": [
{
"id": "section-301",
"name": "Section 301 China Tariffs",
"watchTerms": "section 301,chapter 99,additional duties",
"useUstrContext": true,
"federalRegister": {
"agencySlug": "trade-representative-office-of-united-states",
"documentTypes": "NOTICE",
"keywords": "tariff"
},
"hts": {
"searchTerm": "9903.88",
"htsCodes": "9903.88.01,9903.88.03,9903.88.05",
"maxMatches": 10
}
}
],
"snapshotKey": "my-tariff-watch",
"datasetMode": "changed_only",
"lookbackDays": 14
}

Output

FieldTypeDescription
metaobject
errorsarray
digestsarray
digests[].topicIdstring
digests[].topicNamestring
digests[].checkedAttimestamp
digests[].statusstring
digests[].baselineCreatedboolean
digests[].changedSinceLastRunboolean
digests[].actionNeededboolean
digests[].recommendedActionstring
digests[].summarystring
digests[].signalTagsarray
digests[].watchTermsarray
digests[].federalRegisterQueryobject
digests[].htsQueryobject
digests[].countsobject
digests[].evidenceobject
digests[].errornull

Output Example

Real row from the 2026-10-18 run (trimmed; the full row also carries an evidence object with the matched Federal Register documents and HTS lines):

{
"topicId": "section-301",
"topicName": "Section 301 China Tariffs",
"checkedAt": "2026-10-18T13:46:08.179Z",
"status": "action_needed",
"baselineCreated": true,
"changedSinceLastRun": true,
"actionNeeded": true,
"recommendedAction": "Read the new Federal Register document(s) and map the language to the tracked HTS lines before the next import/export cycle.",
"summary": "HTS baseline captured for this topic. 4 new Federal Register document(s) matched the topic query.",
"signalTags": [
"new_federal_register_document",
"federal_register_notice"
],
"watchTerms": [
"section 301",
"chapter 99"
],
"counts": {
"federalRegisterDocCount": 4,
"newFederalRegisterDocCount": 4,
"newFederalRegisterWatchHitCount": 1,
"htsMatchCount": 10,
"htsAddedCount": 0,
"htsUpdatedCount": 0,
"htsRemovedCount": 0,
"htsChangedCount": 0,
"noticeHitCount": 0,
"newNoticeHitCount": 0,
"ustrContextCount": 0,
"newUstrContextCount": 0
},
"error": null,
"rowType": "tariff_trade_change_digest",
"billingEventName": "apify-default-dataset-item"
}

API Usage

Run this actor programmatically using the Apify API. Replace YOUR_API_TOKEN with your token from Apify Console → Settings → Integrations.

cURL

curl -X POST "https://api.apify.com/v2/acts/taroyamada~tariff-trade-change-digest/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "topics": [{"id": "section-301", "name": "Section 301 China Tariffs", "watchTerms": "section 301,chapter 99,additional duties", "useUstrContext": true, "federalRegister": {"agencySlug": "trade-representative-office-of-united-states", "documentTypes": "NOTICE", "keywords": "tariff"}, "hts": {"searchTerm": "9903.88", "htsCodes": "9903.88.01,9903.88.03,9903.88.05", "maxMatches": 10}}], "lookbackDays": 7, "maxDocsPerTopic": 20, "maxPagesPerTopic": 2, "maxHtsMatchesPerTopic": 15, "delivery": "dataset", "datasetMode": "all", "snapshotKey": "tariff-trade-change-digest-state", "federalRegisterApiUrl": "https://www.federalregister.gov/api/v1/documents.json", "htsBaseUrl": "https://hts.usitc.gov/reststop/", "ustrRssUrl": "https://ustr.gov/rss.xml", "includeUstrContext": false, "requestTimeoutSeconds": 30, "notifyOnNoChange": true, "dryRun": false }'

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("taroyamada/tariff-trade-change-digest").call(run_input={
"lookbackDays": 7,
"maxDocsPerTopic": 20,
"maxPagesPerTopic": 2,
"maxHtsMatchesPerTopic": 15,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "tariff-trade-change-digest-state",
"federalRegisterApiUrl": "https://www.federalregister.gov/api/v1/documents.json",
"htsBaseUrl": "https://hts.usitc.gov/reststop/",
"ustrRssUrl": "https://ustr.gov/rss.xml",
"includeUstrContext": false,
"requestTimeoutSeconds": 30,
"notifyOnNoChange": true,
"dryRun": false
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('taroyamada/tariff-trade-change-digest').call({
"lookbackDays": 7,
"maxDocsPerTopic": 20,
"maxPagesPerTopic": 2,
"maxHtsMatchesPerTopic": 15,
"delivery": "dataset",
"datasetMode": "all",
"snapshotKey": "tariff-trade-change-digest-state",
"federalRegisterApiUrl": "https://www.federalregister.gov/api/v1/documents.json",
"htsBaseUrl": "https://hts.usitc.gov/reststop/",
"ustrRssUrl": "https://ustr.gov/rss.xml",
"includeUstrContext": false,
"requestTimeoutSeconds": 30,
"notifyOnNoChange": true,
"dryRun": false
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Tips & Limitations

  • Run daily for active watchlists; weekly for passive monitoring.
  • Webhook delivery works well for compliance team Slack channels — include docket URL for 1-click access.
  • Use watchKeywords generously — false positives are cheap to triage, false negatives miss filings.
  • Pair with regulatory-change-monitor for cross-agency coverage.
  • Archive Dataset rows weekly for long-term compliance evidence retention.

FAQ

How far back does history go?

This actor monitors forward-only — new items since first run. For historical data, use the agency's own search tool.

What timezones are used?

All timestamps are UTC. Use your downstream pipeline to convert to agency-local time if needed.

Does it translate non-English content?

No — original language is preserved. Use downstream translation services if needed.

Is the data official?

Yes — sourced directly from official government websites and feeds. Not a third-party aggregator.

Can I use this for legal research?

For alerting and monitoring, yes. For litigation research, cross-verify with primary sources (agency websites) — this actor is a monitoring tool, not a legal database.

Government & Regulatory cluster — explore related Apify tools:

Cost

Pay Per Event:

  • actor-start: $0.01 (flat fee per run)
  • dataset-item: $0.003 per output item

Example: 1,000 items = $0.01 + (1,000 × $0.003) = $3.01

No subscription required — you only pay for what you use.

⭐ Was this helpful?

If this actor saved you time, please leave a ★ rating on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.

Bug report or feature request? Open an issue on the Issues tab of this actor.