PDFCrowd Conversion Failed: How to Troubleshoot a URL That Will Not Render
Find out whether a PDFCrowd URL conversion failed at fetch, authentication, resource loading, or rendering—and use the status, reason code, and debug log to diagnose it.
A PDFCrowd URL conversion can fail because the converter cannot reach the source, the request or credentials are wrong, linked resources fail to load, dynamic content is not ready, or a documented service limit is reached. The title alone does not identify the cause. First determine whether this is HTML-to-PDF or PDF-to-HTML, then record the HTTP status, response body, reason code, and debug log before changing settings.
This guide focuses on diagnosing a URL that will not render. PDFCrowd’s HTTP API accepts POST form fields, not JSON request bodies. Its API credentials authenticate your API request; credentials, cookies, or headers for a protected source website are a separate configuration. See the PDFCrowd HTML-to-PDF HTTP API documentation and its FAQ for current request options and limits.
1. Identify the conversion direction
Write down the input and expected output before investigating:
- HTML-to-PDF: A web page URL is fetched and rendered into a PDF. The page and its required resources must be reachable from PDFCrowd’s servers.
- PDF-to-HTML: A URL expected to return a PDF is converted into HTML. Confirm that it actually serves PDF bytes rather than a login page, redirect, or error page.
- Local content: A path on your computer or a
localhostURL is not ordinarily reachable from the converter’s servers. Send the HTML or file content through the supported input workflow instead.
Also record the exact URL after redirects, the time of the failure, the client/runtime, and the settings used. A page loading in your own browser does not establish that a remote conversion service can access it.
2. Capture the failure evidence first
Do not assume the response body is a PDF or JSON until you have checked the HTTP status and headers. Save the complete response body and reason code. PDFCrowd supports structured error details by appending ?errfmt=json to the request URL. Enable debug_log=true and inspect the x-pdfcrowd-debug-log response header or conversion history. PDFCrowd says this debug log links to resource-loading details, timeouts, and browser-console messages.
If the client reports a connection error and there is no HTTP response, troubleshoot the client’s DNS, TLS, proxy, firewall, and network path first. Avoid printing API keys, cookies, or authorization values when logging requests.
Example diagnostic request
This example shows the HTTP API shape for HTML-to-PDF. Replace the placeholders with your PDFCrowd account username and API key. Treat the response as a PDF only after checking the status and content type. Use the current API documentation for the exact endpoint and supported field names for your account and conversion direction.
curl -sS -D response-headers.txt \
-u 'PDFCROWD_USERNAME:PDFCROWD_API_KEY' \
-F 'url=https://example.com/' \
-F 'debug_log=true' \
-o response-body.bin \
'https://api.pdfcrowd.com/convert/24.04/?errfmt=json'
Inspect response-headers.txt, response-body.bin, and any debug-log link. Do not leave credentials in shell history in shared environments; use a secret manager or protected environment configuration for production. The sample endpoint version is shown as documented in PDFCrowd’s API guide; check that guide for the current endpoint version.
3. Verify that the source URL is accessible to the converter
- Open the exact URL from an external network or server, not only from the browser session where you are signed in.
- Check the final response after redirects. Confirm it is the intended page for HTML-to-PDF or actual PDF content for PDF-to-HTML.
- Check whether the host blocks automated or unfamiliar requests, requires a VPN or private network, or allows traffic only from a particular IP range. Do not infer a block without evidence in the response or debug log.
- For a protected page, configure source-site authentication separately from PDFCrowd API authentication. Depending on the site, that may mean website credentials, cookies, or a custom HTTP header.
- If the source is local or only reachable inside your network, provide its content to the API or make it available through an appropriately reachable URL.
For PDF-to-HTML, specifically check that a direct request to the URL returns a PDF, not an HTML login page. If access cannot be provided by URL, submit the PDF bytes using the supported upload workflow.
4. Separate page-fetch problems from missing resources
A converter may reach the HTML document while failing to load images, stylesheets, fonts, or scripts referenced by it. Review the debug log for failed resource requests. Test each important resource URL independently, including redirects and authentication requirements.
- Images missing: Check that image URLs are reachable without a browser-only session and that the page does not generate them only after interaction.
- Styles or fonts missing: Check the stylesheet and font URLs, cross-origin access, redirects, and any required cookies or headers.
- Relative paths broken: HTML submitted as a string or file may have no useful base URL. Use public absolute resource URLs, a suitable
<base>element, or package local assets using the workflow described in PDFCrowd’s FAQ. - PDF URL returns a login or error page: The converter may be receiving that page rather than the PDF. Provide source authentication or upload the PDF content.
Do not try JavaScript wait settings to fix a host that cannot be reached or a resource that needs authentication. First establish whether the request reached the intended source.
5. Adjust rendering settings only when symptoms point to rendering
Once the source and its assets are accessible, match settings to the visible symptom:
| Symptom | Setting or check |
|---|---|
| JavaScript-generated section is blank | Use wait_for_element for a stable selector or a suitable javascript_delay; inspect the debug log for script errors and timeouts. |
| Lazy images or AJAX content is absent | Allow the page time to populate and confirm JavaScript is enabled. Disabling JavaScript can prevent lazy-loaded images and AJAX content from appearing. |
| Page layout differs from the browser | Check viewport width and whether the site relies on print styles; PDFCrowd documents the use_print_media option. |
| Unwanted or unsuitable print styling | Test custom CSS or the documented print-media setting, changing one variable at a time. |
Waiting longer will not extend PDFCrowd’s documented 60-second server-side processing limit. A larger client timeout only changes how long your client waits for a response.
6. Interpret status codes and reason codes before retrying
| Signal | What to do |
|---|---|
| HTTP 429 | Request-rate limit. Reduce request rate and retry later with bounded backoff; check the current account limits. |
| HTTP 430 | Concurrency limit. Reduce simultaneous conversions and queue the remaining work. |
| HTTP 503 | Temporary network or service issue may be involved. Retry a limited number of times with increasing delays and retain each result. |
| Reason code 323 | The documented server-side processing limit was reached. Simplify or split the conversion where possible; raising the client timeout does not change this limit. |
| Authentication or invalid-request error | Correct the API credentials, request fields, input URL, or source-site credentials before retrying. |
PDFCrowd documents a 300 MB maximum upload size and 60 seconds maximum server-side processing time in the reviewed API material. Limits can depend on license and may change, so confirm them in the current API and account documentation before designing retries or payload sizes.
7. Use a bounded retry policy
Retry only failures that appear temporary, such as a transient 503 or network interruption. Use a small retry cap and increasing delays; do not repeatedly submit malformed requests, bad credentials, inaccessible URLs, or conversions that exceed a fixed processing limit.
attempts = 0
max_attempts = 3
delay_seconds = 1
while attempts < max_attempts:
response = submit_conversion()
if response.status_code not in (503,):
break
attempts += 1
if attempts < max_attempts:
sleep(delay_seconds)
delay_seconds *= 2
This pseudocode retries only status 503. Adapt the retryable conditions to the status and reason codes in your API response, and avoid retrying a request if the client cannot tell whether a conversion was already accepted unless your workflow can safely handle duplicates.
8. Common errors and fixes
| Observed problem | Likely area to investigate | Next action |
|---|---|---|
| Request rejected immediately | Wrong method, JSON body, malformed fields, or API authentication | Use the documented POST form fields and verify PDFCrowd username/API key. |
| Source loads locally but conversion cannot fetch it | Network reachability, access controls, local-only URL | Test from outside your browser session; provide source content or a reachable URL. |
| PDF-to-HTML output resembles a login page | URL returned HTML instead of a PDF | Supply source authentication or upload the PDF bytes. |
| Page appears, but images, fonts, or styles are missing | Linked resource fetch, authentication, or relative paths | Review resource failures in the debug log and make URLs resolvable to the converter. |
| Dynamic section is empty | JavaScript timing, selector wait, or browser-console error | Wait for a stable element or appropriate delay; inspect console messages. |
| Conversion stops near a fixed duration | Server-side processing limit or slow page/resources | Use reason code and debug log, reduce work, and verify the current service limit. |
| Intermittent errors during a burst | Rate or concurrency limit, or temporary network issue | Check for 429, 430, or 503 and apply queueing or bounded backoff as appropriate. |
9. Escalate with a reproducible report
If the evidence does not identify the cause, send support a minimal reproduction with:
- Conversion direction and exact input URL, if safe to share.
- Timestamp, request settings, client/runtime version, and whether the source is protected.
- HTTP status, response headers, full response body, and reason code.
- The relevant debug-log link and any failed resource URLs.
- What you expected and what the output or error actually contained.
Redact API keys, session cookies, authorization headers, and private data. PDFCrowd’s API documentation asks users to include diagnostics when reporting problems.
10. Performance, reliability, and cost considerations
- Performance: A page with many resources, slow scripts, or delayed rendering can approach the server-side processing limit. Use the debug log to distinguish page execution time from fetch failures, and avoid adding arbitrary waits before confirming a timing symptom.
- Reliability: Preserve status, reason code, and debug details for every failure. Queue requests to stay within account limits, retry transient errors with bounds, and correct deterministic errors rather than replaying them.
- Cost: Check the current PDFCrowd pricing and license terms for your expected volume and the limits attached to your account. The documentation’s upload and processing limits are operational constraints, not a price quote.
- Privacy: URLs, headers, and cookies can expose protected data. Share only the minimum reproduction details needed, and redact credentials from support reports and logs.
Or skip the browser setup
If you need a clean screenshot of a page while investigating its rendering, ScreenshotNeo is a website screenshot API and MCP server. It captures PNG, JPEG, WebP, or PDF from one GET request. It is useful when you want to inspect the visible page without maintaining browser capture setup. ScreenshotNeo is not a diagnosis of a PDFCrowd error, and it does not establish that a protected source is accessible to PDFCrowd.
cURL:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python:
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js:
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
See the ScreenshotNeo API documentation for response handling and options. Cookie and consent banners, newsletter popups, and chat widgets are removed before capture; each step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are never billed, and response headers identify the page verdict and billing status. An MCP server gives AI agents tools to take screenshots, get page information, and capture PDFs. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 screenshots. Create a free ScreenshotNeo account and get 1,000 screenshots a month with no card.
FAQ
Does a successful PDFCrowd API login prove it can access my page?
No. API authentication and authentication to the source website are separate. Configure source credentials, cookies, or headers when the page requires them.
Will increasing my HTTP timeout fix reason code 323?
No. The documented 60-second processing limit is server-side; a client timeout only controls how long your client waits.
Can I use a localhost URL as the conversion source?
Not when the converter runs on a remote server and cannot reach your machine. Submit the content through the supported input method or use a URL reachable by the service.
What should I include when asking for help?
Include the conversion direction, status and reason code, response body, debug-log link, settings, and a reproducible URL when safe. Remove secrets first.


