URL Normalizer & Deduplicator avatar

URL Normalizer & Deduplicator

Pricing

from $0.20 / 1,000 normalized urls

Go to Apify Store
URL Normalizer & Deduplicator

URL Normalizer & Deduplicator

Cleans a list of URLs and marks the ones that point at the same page. Strips tracking parameters and unifies scheme, host case, default ports, query order and trailing slashes.

Pricing

from $0.20 / 1,000 normalized urls

Rating

0.0

(0)

Developer

Ryusuke Asai

Ryusuke Asai

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

22 days ago

Last modified

Share

Clean a list of URLs and find the ones that point at the same page.

Two URLs can look different and still be the same page. https://Example.com/a/?utm_source=x and http://example.com:80/a are one page, not three. Scrapers, sitemap dumps, CRM exports and link audits are full of these, and they quietly inflate every count downstream.

This Actor rewrites each URL into one canonical form and marks the repeats.

What it does to each URL

BeforeAfter
Host casehttps://Example.COM/ahttps://example.com/a
Default porthttps://example.com:443/ahttps://example.com/a
Tracking parameters…/a?utm_source=x&id=1…/a?id=1
Query order…/a?b=2&a=1…/a?a=1&b=2
Trailing slashhttps://example.com/a/https://example.com/a
Fragment…/a#section…/a
Schemehttp://example.com/ahttps://example.com/a

Non-default ports, percent-encoding and query parameters you actually use are left alone.

Input

FieldTypeDefault
urlsarrayrequired
stripParamsarrayutm_*, fbclid, gclid, refthe parameters to remove
forceHttpsbooleantruerewrite http:// as https://
keepTrailingSlashbooleanfalsekeep the slash at the end of the path

Output

One row per input URL, in the order you sent them.

{ "original": "https://Example.com/a?utm_source=x", "normalized": "https://example.com/a", "isDuplicate": false }
{ "original": "https://example.com/a/", "normalized": "https://example.com/a", "isDuplicate": true }
{ "original": "not a url", "normalized": "", "isDuplicate": false, "error": "not a valid URL" }

Nothing is dropped. A URL that cannot be parsed comes back with an error and the run continues, so the output always lines up with the input.

What it does not do

  • It does not fetch anything. No requests are made to the URLs, so it is fast and cannot be blocked.
  • It does not follow redirects. Two URLs that redirect to the same page are not detected as duplicates.
  • It does not know your site. If a query parameter matters to you, keep it out of stripParams.