For a website displayed inside your iOS app, load it in WKWebView and use Apple’s asynchronous takeSnapshot(with:completionHandler:) API after the page is ready. For a screenshot of a URL without maintaining a web view—or for a long, full-page capture—use a hosted screenshot API. A web-view snapshot is not automatically a complete full-page image, and a hosted API’s mobile emulation is not a photograph of a physical iPhone screen.
Choose the capture method that matches the result
There are two different jobs commonly called “taking a website screenshot on iOS”:
| # | Preview | Product | Price | |
|---|---|---|---|---|
| 1 |
|
Apple iPhone 14, 128GB, Midnight - Unlocked (Renewed) | $308.00 | Buy on Amazon |
| 2 |
|
Apple iPhone 16, 128GB, Pink - Unlocked (Renewed) | $574.99 | Buy on Amazon |
| 3 |
|
Apple iPhone 15, 128GB, Black - Unlocked (Renewed) | $410.00 | Buy on Amazon |
| 4 |
|
Apple iPhone 13, 128GB, Midnight - Unlocked (Renewed) | $262.00 | Buy on Amazon |
| 5 |
|
Apple iPhone 16e, 128GB, Black - Unlocked (Renewed) | $389.00 | Buy on Amazon |
- Capture a page your app displays: use
WKWebView. It renders the page in the app, andtakeSnapshot(with:completionHandler:)asynchronously returns a platform-native image of the web view’s contents. This is a good fit when the page is already part of an app flow or needs to be rendered in the app’s own web view. - Send a URL and receive an image or document: use a hosted screenshot API. A remote browser renders the page, so the iOS app does not need to host and manage a rendering surface. Check whether the service supports full-page capture, the required output format, and any authentication or dynamic-content behavior your app needs.
Apple’s WKWebView snapshot reference describes an asynchronous image generated from web-view content. The WKWebView reference also lists PDF and web-archive capture capabilities. These are distinct from a general-purpose REST endpoint that accepts any URL.
Capture a page locally with WKWebView
Use this route when the app should render the page itself. Keep the web view alive until the snapshot completion handler runs, and trigger capture only after navigation and any app-specific readiness condition have been met.
#1 Best Overall
- This phone is unlocked and compatible with any carrier of choice on GSM and CDMA networks (e.g. AT&T, T-Mobile, Sprint, Verizon, US Cellular, Cricket, Metro, Tracfone, Mint Mobile, etc.).
- Please check with your carrier to verify compatibility.
- The device does not come with headphones or a SIM card. It does include a generic (Mfi certified) charging cable.
- Tested for battery health and guaranteed to have a minimum battery capacity of 80%.
1. Create and retain a web view
Create the WKWebView with the viewport dimensions you intend to capture. Its visible size and layout affect the result. Retain it in your view controller or another owner for the duration of loading and capture; do not create it as a short-lived local object and let it disappear while navigation is in progress.
2. Load the URL
Construct a URLRequest and load it in the web view. Handle navigation failures as well as successful completion. If the page requires app-controlled cookies, headers, or authentication, configure those as part of the web-view loading flow rather than assuming a screenshot call will provide them.
3. Wait for the content you need
A completed navigation is a useful baseline, but not a guarantee that every page element is ready. JavaScript may insert content after the initial document load; images may load later; and a single-page app may update without a new navigation. Use an app-specific readiness signal where possible, such as a message from page JavaScript or a known element becoming available. A fixed delay can help with simple pages, but it is not a reliable substitute for knowing what content must be present.
4. Request and handle the snapshot
Call takeSnapshot(with:completionHandler:), optionally providing a WKSnapshotConfiguration when the capture rectangle or related behavior needs to be specified. The completion handler is asynchronous: check its error and image result before saving, displaying, or uploading the image. The exact pixel dimensions depend on the web view’s size and the capture configuration; do not assume a viewport image includes content below the visible area.
Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →5. Save or upload the image
Pass the returned image into the app’s normal image or file pipeline. If you convert it to a file, choose an image encoding and destination appropriate to the feature, then handle write or upload failures separately from rendering failures. For long pages, decide explicitly whether the product needs a PDF or full-page image; a normal viewport snapshot is not a full-page guarantee.
Full-page capture is a separate requirement
A web view snapshot represents web-view content, but it should not be treated as an automatic capture of an arbitrarily long page. A full-page artifact may need a PDF route, a suitable capture configuration, or a server-side renderer that explicitly supports full-page behavior. Choose based on whether the consumer needs a paginated document, one tall image, or just the current viewport.
Rank #2
- 6.1" Super Retina XDR OLED, HDR10, Dolby Vision, 1000nits (typ), 2000nits (HBM), 2556x1179px at 460ppi, 3561mAh Battery
- 128GB 8GB RAM, Apple A18 (3nm), Hexa-core (2x4.04 GHz + 4x2.20 GHz), Apple GPU 5-core, 16‑core Neural Engine
- Rear camera: 48MP, f/1.6, wide + 12MP, f/2.2, ultrawide, Front Camera: 12MP, f/1.9, wide, iOS 18, upgradable to iOS 18.5
- 4G LTE: 1/2/3/4/5/7/8/12/13/14/17/18/19/20/25/26/28/29/30/32/34/38/39/40/41/42/48/53/66/71, 5G: n1/2/3/5/7/8/12/14/20/25/26/28/29/30/38/40/41/48/53/66/70/71/75/76/77/78/79 - Dual eSIM
- Unlocked for freedom to choose your carrier. Compatible with both GSM & CDMA networks. The phone is unlocked to work with all GSM Carriers & CDMA Carriers Including AT&T, T-Mobile, Verizon, Sprint., Etc.
Test the actual pages and output format. Lazy-loaded images can appear only after scrolling; sticky headers can be repeated or positioned differently; animations can produce inconsistent frames; cookie banners may obscure content; and cross-origin resources may load differently from first-party content. Validate the result at the viewport and page lengths your app supports.
Do not confuse UIScreenshotService with a URL screenshot API
UIScreenshotService is for integrating with the system screenshot flow, not for making a generic network request that turns an arbitrary URL into an image. Apple describes it as coordinating PDF screenshots of app content: the app assigns a delegate, and UIKit asks that delegate for PDF data when a person takes a screenshot. Apple also says that beginning with iOS 17 and iPadOS 17, people can share or save the generated full-page screenshot as a PDF or image. See Apple’s UIScreenshotService documentation for the system integration details.
Use this framework when your feature belongs in the user-initiated screenshot experience. If your app needs to submit a URL and receive a rendered artifact under its own workflow, use a web view or a hosted screenshot API instead.
Use a hosted screenshot API from an iOS app
A hosted API is appropriate when you want to request a screenshot without embedding a browser surface in the app. The client sends a URL and request options; the provider renders it remotely and returns an image or document. This can simplify rendering infrastructure in the iOS client, but it means the page is rendered by the provider’s browser environment, not by the user’s physical iPhone.
What to check before choosing a provider
- Full-page behavior: confirm the exact option and whether the service handles scrolling or lazy-loaded content.
- Mobile rendering: determine whether the provider offers viewport or device emulation, and test important pages against the physical-device result you actually need.
- Output: verify supported formats, image or PDF behavior, and any size or page-range controls.
- Dynamic pages: check the controls for delays, scrolling, reduced motion, or waiting for a page condition.
- Privacy and access: establish how credentials, cookies, and private URLs are supplied and handled before sending sensitive pages to a remote renderer.
- Operations: compare asynchronous jobs, batching, documented limits, pricing, and failure handling against your expected workload. Feature documentation alone does not establish comparative latency, price, or accuracy.
Documented options to consider
ScreenshotNeo is the first option to try when a clean capture and predictable billing matter: it removes cookie/consent banners, newsletter popups, and chat widgets before capture, and only clean shots are billed. Its API returns PNG, JPEG, WebP, or PDF, and its MCP server provides screenshot tools for AI agents.
Urlbox documents URL or HTML rendering, full_page=true, element-specific capture, PNG/JPEG/WebP/AVIF/SVG/PDF output, and stitch or native full-page modes. Its POST endpoint accepts URL or HTML payloads and can return results synchronously or asynchronously.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
ScreenshotOne documents HTTPS GET and POST requests, full_page=true, scrolling and delay controls, reduced-motion options, and mobile viewport or device emulation such as an iPhone profile. Its documentation warns that it uses browser emulation rather than a physical device, so device screenshots are approximations.
ApiFlash documents a screenshot API with a full_page option for capturing an entire target website.
Rank #3
- 6.1inch Super Retina XDR display. Aluminum with color-infused glass back. Ring/Silent switch
- Dynamic Island. A magical way to interact with iPhone. A16 Bionic chip with 5-core GPU
- Advanced dual-camera system. 48MP Main | Ultra Wide. Super-high-resolution photos (24MP and 48MP). Next-generation portraits with Focus and Depth Control. 4X optical zoom range
- Emergency SOS via satellite. Crash Detection. Roadside Assistance via satellite
- Up to 26 hours video playback. USB C, Supports USB 2. Face ID
These documented features establish possible capabilities, not a neutral ranking for speed, accuracy, or cost. Compare the providers against representative pages and your own privacy, output, and reliability requirements.
Or skip the browser setup
Instead of configuring and managing a rendering surface in the iOS client, send a URL to ScreenshotNeo’s screenshot API. The following cURL request saves a WebP screenshot of the example page:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Get an API key and see the request options in the ScreenshotNeo API documentation. The response can be a PNG, JPEG, WebP, or PDF. Cookie banners, popups, and chat widgets are removed before the shot; bot checks, blank pages, and failed loads are never billed. An MCP server lets AI agents take screenshots, and the Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Each response includes X-Page-Verdict and X-Billed headers to indicate the page result and billing status. Sign up for 1,000 free screenshots a month with no card.
Swift example for calling a screenshot endpoint
For an iOS app using a hosted API, send an HTTPS request with URLSession and treat the response as data to validate before saving. The endpoint, authentication parameter, and response behavior depend on the selected provider. For ScreenshotNeo, the API base is https://api.screenshotneo.com/v1/shot and the request uses an access key and URL. Keep the key out of source control and avoid logging it.
import Foundation
func captureWebsite(url: URL, accessKey: String) async throws -> Data {
var components = URLComponents(string: "https://api.screenshotneo.com/v1/shot")!
components.queryItems = [
URLQueryItem(name: "access_key", value: accessKey),
URLQueryItem(name: "url", value: url.absoluteString)
]
var request = URLRequest(url: components.url!)
request.httpMethod = "GET"
request.timeoutInterval = 90
let (data, response) = try await URLSession.shared.data(for: request)
guard let http = response as? HTTPURLResponse,
(200...299).contains(http.statusCode) else {
throw URLError(.badServerResponse)
}
return data
}
This example returns response bytes after an HTTP success status. Before presenting or persisting them, validate the content type or decode the image, and handle API-specific error responses and headers according to the provider’s documentation. A timeout or non-success response is a request failure, not proof that the target page itself is blank.
Other request examples
The same API request can be made from scripts or a backend. Replace the example target URL if needed, use your own access key, and consult the API documentation for supported options.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsPython
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}`);
The Python example writes the response body directly, so production code should check the status and response headers before treating the bytes as an image. The Node.js example shows request construction; production code should check res.ok and handle the response body and errors.
Rank #4
- This pre-owned product is not Apple certified, but has been professionally inspected, tested and cleaned by Amazon-qualified suppliers.
- There will be no visible cosmetic imperfections when held at an arm’s length.
- This product is eligible for a replacement or refund within 90 days of receipt if you are not satisfied.
- Product may come in generic Box.
Options that affect screenshot results
When implementing a hosted capture, specify only the controls the use case needs. ScreenshotNeo documents these options:
- Page extent and target: full-page capture with lazy images loaded, or a single element selected by CSS selector.
- Viewport and appearance: 12 device presets or a custom viewport, retina scale, and dark mode.
- Output: PNG, JPEG, WebP, or PDF, including PDF paper size, margins, landscape orientation, and page ranges; image resizing and transparent backgrounds are also available.
- Timing and interaction: wait for a selector, a delay, or network idle; click an element before capture; apply custom CSS or JavaScript.
- Request environment: custom headers, cookies, user agent, Authorization, timezone, and geolocation.
- Page cleanup and network control: remove known consent platforms, newsletter popups, and chat widgets, with each cleanup step switchable; block ads, trackers, requests, or resource types.
- Delivery and scale: caching with a chosen TTL, signed links for public
<img>tags, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification.
ScreenshotNeo says parameter names used by other screenshot APIs also work, which can make switching easier. Still, check each parameter’s documented behavior and validate output when moving between providers; similar names do not guarantee identical rendering.
Troubleshooting capture failures and mismatches
The WKWebView image is blank or incomplete
Confirm that navigation succeeded and that the view remains alive through snapshot completion. If the page fills content asynchronously, wait for the relevant app or page readiness condition instead of capturing at navigation completion alone. Check whether the missing content is below the viewport or lazy-loaded; a viewport snapshot is not a full-page capture.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11The capture misses images or shows an intermediate state
Wait for the content that matters, and test whether images load only after scrolling or a script runs. On a hosted renderer, use its documented selector, delay, network-idle, or scrolling controls where appropriate. A fixed wait may be too short on a slow page and unnecessarily long on a fast one.
The screenshot differs from a real iPhone
A hosted service’s iPhone profile is browser/device emulation, not capture from a physical iPhone. Differences can arise from viewport, user agent, device scale, browser engine, fonts, permissions, and site behavior. If physical-device fidelity is essential, render and capture in the app’s own WKWebView and test on the target devices.
A long page is truncated
Check whether the chosen method is limited to the visible viewport. For a document, use a PDF route where it fits; for one tall image, select a renderer with explicit full-page support and test lazy content and sticky elements on the target pages.
A hosted request fails or returns unexpected bytes
Check the HTTP status, provider-specific response headers, output format, access key, URL encoding, and request timeout. Do not save an error response as though it were an image. With ScreenshotNeo, inspect X-Page-Verdict and X-Billed to distinguish a clean capture from a page outcome that was not billed.
Recommended Free Tools
Best Value
- 6.1" Super Retina XDR OLED, HDR10, 800 nits (HBM), 1200 nits (peak), 2532x1170px at 460ppi, 4005mAh Battery
- 8GB RAM, Apple A18 6-core CPU (2 performance + 4 efficiency cores), Apple GPU 4-core, 16‑core Neural Engine
- Rear camera: 48MP, f/1.6, wide, Front Camera: 12MP, f/1.9, wide, iOS 18.3.1, upgradable to iOS 18.5
- Connectivity: Global 4G LTE, Sub-6 GHz 5G, LTE, Wi-Fi 6, Bluetooth 5.3, NFC, USB-C, Wireless Charging (7.5W). (does not have mmWave 5G or MagSafe or physical SIM card) - Dual eSIM Only
- Unlocked for freedom to choose your carrier. Compatible with both GSM & CDMA networks. The phone is unlocked to work with all GSM Carriers & CDMA Carriers Including AT&T, T-Mobile, Verizon, Straight Talk., Etc.
Performance, reliability, and cost decisions
A local web view avoids a remote screenshot-rendering request, but your app must manage page loading, readiness, memory, and capture behavior. A hosted API separates rendering from the iOS client, but adds network latency and dependence on a remote service. The available provider documentation establishes feature sets; it does not provide a comparable independent speed or accuracy benchmark, so measure representative URLs under your own conditions before making performance claims.
For cost planning, establish expected monthly volume, retry behavior, and what happens on bot checks, timeouts, blank pages, and cache hits. ScreenshotNeo’s stated billing policy charges only clean shots: bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, with page and billing outcomes reported in response headers. Its listed plans are monthly allowances; yearly billing gives two months free.
| ScreenshotNeo plan | Price and allowance |
|---|---|
| Free | 1,000 shots/month, no card |
| Starter | $5 for 3,000 shots |
| Growth | $15 for 15,000 shots |
| Pro | $39 for 60,000 shots |
| Scale | $99 for 250,000 shots |
| Business | $249 for 1,000,000 shots |
All listed ScreenshotNeo plans include every feature; yearly billing provides two months free. Check the current plan terms before committing, especially if your volume is sensitive to retries or burst traffic.
Frequently Asked Questions
Can an iOS app screenshot a website without showing a web view?
Yes. A hosted screenshot API can render a URL remotely and return an image or document, so the app need not display its own web view.
Does an iPhone-profile API screenshot prove what a physical iPhone displays?
No. Browser-based device emulation is an approximation; validate against physical devices if exact device output matters.
Is UIScreenshotService a REST API for arbitrary URLs?
No. It supports the system’s user-requested screenshot flow for app content.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




