> For the complete documentation index, see [llms.txt](https://docs.restock.gg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.restock.gg/features/functions/pod-downloader.md).

# POD Downloader

The **POD Downloader** is a standalone window for fetching **Proof of Delivery** PDFs in bulk straight from the carrier's website. Instead of pulling each PDF one-by-one for disputes or accounting, you paste a list of tracking numbers (or tracking URLs), choose a carrier, and the tool downloads every PDF into a single folder.

<figure><img src="/files/VsJCMe6vGfGinViIKrrW" alt=""><figcaption><p>The POD Downloader window — paste one tracking number or tracking URL per line, pick a carrier, parse, and click <strong>Download PODs</strong>.</p></figcaption></figure>

## Where to find it

You can access the **POD Downloader** from the **Features tab** in the main window (POD Downloader button under the Functions section).

## Supported carriers

The POD Downloader currently supports:

* **UPS**
* **DHL**
* **DPD**

Any other carrier will show **Needs carrier** in the row Status column and will be skipped during download.

## How to use it

### 1. Paste your trackings

Paste one tracking per line into the **Paste Trackings** textbox. Each line can be either:

* A bare tracking number (`1Z999AA10123456784`)
* A full carrier tracking URL (`https://www.ups.com/track?tracknum=1Z999AA10123456784`)

The parser extracts the tracking number from URLs automatically.

### 2. Pick a carrier mode

Use the **Carrier** dropdown in the top right:

* **Auto** *(default)* — detects the carrier from the URL host or the tracking-number format.
* **UPS / DHL / DPD** — forces every line to be parsed as that carrier. Useful when you have raw tracking numbers without URLs.

### 3. Parse

Click **Parse**. The tool:

* Splits the textbox into lines and trims whitespace.
* Deduplicates by `carrier:tracking` (so pasting the same tracking twice is fine).
* Resolves each line into a row with a detected carrier.

The summary strip on the right shows a live count: *`N trackings / X ready / Y need carrier`*.

### 4. Adjust per-row carrier (optional)

Each row has its own **Carrier** dropdown. If a row was detected as the wrong carrier, or shows `Needs carrier`, pick the correct one inline — the row's status updates immediately.

### 5. Download

Click **Download PODs**. The tool walks every row that is **Ready** and:

* Calls the carrier's POD endpoint and saves the PDF.
* Updates the row's status as it goes (`Downloading` → `Downloaded` / `Saved` / `Failed`).
* Shows a final snackbar: *`PODs finished. Downloaded: X, skipped: Y, failed: Z.`*

### 6. Open the folder

Click **Open Folder** to jump straight into the destination folder in Windows Explorer.

## Where the PDFs are saved

PODs are written to a **`Delivery PDFs`** folder next to the tool's startup directory. Each file is named after the tracking number — `1Z999AA10123456784.pdf` etc.

The folder is created automatically the first time you download. Files already present in this folder are **not re-downloaded** — the row status switches to **Saved** instead, so you can paste the same list across multiple sessions without re-hitting carrier APIs.

## Status reference

| Status            | Meaning                                                                        |
| ----------------- | ------------------------------------------------------------------------------ |
| **Ready**         | Row has a valid tracking + supported carrier — will be downloaded.             |
| **Saved**         | A non-empty PDF for this tracking already exists in the Delivery PDFs folder.  |
| **Downloading**   | The tool is currently fetching this row's PDF.                                 |
| **Downloaded**    | PDF was just saved.                                                            |
| **Needs carrier** | Carrier is `NaN` or unsupported — pick UPS, DHL, or DPD from the row dropdown. |
| **Invalid**       | Tracking code is missing or `untrackable`.                                     |
| **Failed**        | Download failed — hover the row to see the error reason.                       |

## Tips

* **Mixing carriers in one batch is fine** — leave the Carrier dropdown on **Auto** and paste a mix of UPS/DHL/DPD URLs. Parse handles them per-row.
* **Re-runs are cheap** — a second click of Download PODs on the same list will only retry the rows that previously failed; everything else is already on disk and shows **Saved**.
* **Empty list?** Click **Parse** without any text to clear the rows, or use the **Clear** button to wipe both the textbox and the row list.
