Export status and downloads
Every export you trigger ends up in the Exports tab — a list of jobs with their statuses, ready-to-download links, and timestamps.
In this guide:
- Open the Exports tab
- The four statuses
- Download a ready file
- What “expired” means
- What “failed” means (and how the credit refund works)
Open the Exports tab
Sidebar → Exports.
Newest first. Each row:
| Column | What |
|---|---|
| Format | PDF or CSV. |
| Search | The originating search’s keyword + marketplace. |
| Created | When the export was enqueued. |
| Status | One of generating, ready, failed, expired. |
| Ready at | Timestamp the file became downloadable. |
| Expires at | When the download link will go dead. |
| Size | Human-readable file size. |
| Action | Download / regenerate / delete. |
The four statuses
generating
The export worker is building the file. Most jobs finish in 5–30 seconds. Long jobs (large expanded searches, hundreds of products) can take up to a minute or two.
While generating, the row shows a small spinner. Pull-to-refresh or wait — the row updates automatically when status changes (without a page refresh).
ready
The file is built. The Download button is live and the Expires at timestamp is 1 hour from now.
Click Download → the file downloads. (You can download multiple times within the 1-hour window.)
expired
More than 1 hour after the file became ready. The download link is dead and the file has been deleted from storage.
The row stays in the Exports tab as a record of the action; you can’t recover the file. To get a fresh copy, click Regenerate — that creates a new export job (1 credit).
failed
Something went wrong during generation. The row shows a brief error reason (“data unavailable”, “internal error”, etc.). The credit is automatically refunded.
You can:
- Retry — re-runs the export (charges 1 credit; this time hopefully succeeds).
- Delete — removes the row from the list. (Doesn’t undo anything; just cleans up.)
- Open ticket — if the failure is persistent, the row’s ⋯ menu has a “report” link that bundles the export details for support.
Downloading a ready file
Just click the Download button. The file is served directly (no JSON envelope, no API token in the URL — just the raw bytes with a sensible filename).
Filenames follow this pattern:
hilal-product-research_<keyword>_<marketplace>_<YYYY-MM-DD>.pdf
hilal-product-research_<keyword>_<marketplace>_<YYYY-MM-DD>.csvSpaces in the keyword are replaced with hyphens. Special characters are stripped.
When an export fails: the refund mechanic
When generation fails:
- The export job’s status flips to
failed. - Hilal’s credit service detects the failure and posts a refund.
- The credit appears in your Credit ledger with the original export’s UUID and reason
export_failed. - The whole flow happens automatically; you don’t have to ask.
Time-to-refund: usually within 30 seconds of failure detection.
If the refund doesn’t appear within 5 minutes, check the Credit ledger. If it’s still missing, file a ticket with the export UUID.
Common failure causes
| Reason in the row | What it means | What to do |
|---|---|---|
| “Data unavailable” | The underlying search data was stale or partially deleted. | Re-fetch or re-run the search, then export. |
| “Internal error” | Something in the worker glitched. | Retry. If persistent, file a ticket. |
| “Storage failure” | Hilal’s storage backend was briefly unavailable. | Retry; should succeed. |
| “Search not found” | The export was on a search that’s been deleted. | Can’t recover; the search is gone. |
Bulk operations
The Exports tab supports a small number of bulk operations:
- Delete expired — clears all expired rows from the list.
- Delete failed — clears all failed rows (after you’ve reviewed them).
Bulk operations only affect the list; the underlying credits are untouched (refunds already happened for failures, expirations don’t refund).