Adobe Scan Data API: Document Cloud scans, OCR and folders
Adobe Scan is Adobe's mobile scanner for Document Cloud: it captures receipts, IDs, contracts and whiteboards with the phone camera, cleans the images up and files them as PDFs. It sits in the utilities and productivity market, serving a large free-tier audience across the US, India and Mexico that wants paper turned into searchable documents.
As a data source, the app exposes both the account behind the scans and the archive itself: identity fields like displayName, email and countryCode, the storage envelope storageQuota / storageUsed / storageRemaining, and per-document metadata such as pageCount, tags and scanMetadata.createdByScan. Integrators build receipt vaults, full-text search across scans and quota-aware capture pipelines on top of it.
Adobe Scan is Adobe's camera-to-PDF scanner that turns phone photos of receipts, contracts and whiteboards into searchable, OCR'd PDFs stored in Document Cloud, with a large free user base across the US, India and Mexico. Behind the capture flow sits a rich dataset: the signed-in Adobe identity with plan and country, the account's storage quota and region, and a scan library whose documents carry page counts, tags, scan provenance and full-text search hits. That data feeds receipt-vault, records-search and quota-aware ingest integrations built on a user's own scan archive.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Issue an access token
POST
/v1/scancloud/auth/tokenopendataExchanges an authorization code or refresh_token for the Bearer access_token that account, document, search and job calls attach as Authorization: Bearer.
Auth: None on the token call itself. Body carries grant_type (authorization_code or refresh_token) plus client_id. The returned access_token is sent as Authorization: Bearer on later cloud calls, with x-api-key set to the app client id.
- grant_type
- client_id
- code
- refresh_token
- access_token
- token_type
- expires_in
POST /v1/scancloud/auth/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&client_id=scan-android-client&code=SplxlOBeZQQYbYS6WxSbIA{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example", "token_type": "bearer", "expires_in": 86400, "refresh_token": "XAa1eFv3k3qQYk1z3xY2bQ" }reconstructed from the app's sign-in and token exchange flowmatches the Bearer credential attached to every cloud call
Discover cloud operation catalog
GET
/v1/catalogopendataReturns the operation catalog the client caches: each cloud operation (get_profile, upload, convert, list, document actions) arrives with uri, httpMethod, accept/contentType profiles and authentication.
Auth: Authorization: Bearer <access_token> from POST /v1/scancloud/auth/token. Accept is a vendor JSON media type carrying the catalog profile. Client also sends x-api-key.
- expiry
- resources
- templates
- uri
- httpMethod
- authentication
- accept
- contentType
- uriParameters
- formDataParameters
GET /v1/catalog HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="catalog_v1.json" x-api-key: scan-android-client{ "expiry": 1727606400000, "resources": { "account": { "get_profile": { "uri": "/v1/scancloud/account/profile", "httpMethod": "GET", "authentication": ["bearer"] } }, "documents": { "upload": { "uri": "/v1/documents", "httpMethod": "POST" }, "convert": { "uri": "/v1/documents/convert", "httpMethod": "POST" } } }, "templates": {} }reconstructed from the app's first-run bootstrap, which caches an operation catalog before any account call
Read cloud account identity
GET
/v1/scancloud/account/profileosintReturns the signed-in Adobe ID (userId, email, displayName, countryCode) plus cloud quota, storage region and subscription codes that gate OCR and upload limits in the app.
Auth: Authorization: Bearer <access_token>. Accept profile selects the account representation. Optional query fields selects identity, storage limits, subscriptions and related slices.
- identity
- userId
- userUri
- displayName
- firstName
- lastName
- countryCode
- language
- category
- analyticsPlanCode
- mrktPermEmail
- limitsStorageDocumentCloud
- storageQuota
- storageUsed
- storageRemaining
- storageSlop
- storageDocumentCloud
- region
- encryptionKeyStatus
- subscriptions
GET /v1/scancloud/account/profile?fields=identity,storageLimits,subscriptions HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="account_v1.json" x-api-key: scan-android-client{ "identity": { "userId": "A3F9C2D1B8470E56", "userUri": "/v1/scancloud/account/A3F9C2D1B8470E56", "email": "[email protected]", "displayName": "Ada Lovelace", "firstName": "Ada", "lastName": "Lovelace", "countryCode": "US", "language": "en-US", "category": "individual", "analyticsPlanCode": "free", "mrktPermEmail": true }, "storageLimits": { "storageQuota": 2147483648, "storageUsed": 314572800, "storageRemaining": 1832910848, "storageSlop": 104857600 }, "storageRegion": { "region": "VA6", "encryptionKeyStatus": "available" }, "subscriptions": { "subscriptions": [ { "code": "acrobat_free", "displayName": "Acrobat Free", "features": [] } ] } }reconstructed from the account screen and the plan/quota gating logic
Read cloud storage quota
GET
/v1/account/storageopendataReturns the dedicated cloud storage envelope (quota, used, remaining, slop) the upload preflight checks before a scan is saved to the cloud.
Auth: Authorization: Bearer <access_token>. Catalog operation for the storage envelope. Accept profile selects the quota representation.
- storageQuota
- storageUsed
- storageRemaining
- storageSlop
GET /v1/account/storage HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="storage_v1.json" x-api-key: scan-android-client{ "storageQuota": 2147483648, "storageUsed": 314572800, "storageRemaining": 1832910848, "storageSlop": 104857600 }reconstructed from the upload preflight that checks remaining space before saving a scan
Get cloud root collection
GET
/v1/collections/rootopendataResolves the signed-in user's cloud root collection (folderId, rootUri) that later list, create and upload calls parent to.
Auth: Authorization: Bearer <access_token>. Catalog operation for the root collection.
- folderId
- rootUri
GET /v1/collections/root HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="collection_v1.json" x-api-key: scan-android-client{ "collectionId": "root-ada-scan", "collectionUri": "/v1/collections/root-ada-scan" }reconstructed from the library home screen's root listing
List collection members
GET
/v1/collections/{collectionId}/itemsopendataPages the contents of a cloud collection as members (document or sub-collection) with name, size, pageCount, tags, favorite/starred/shared flags.
Auth: Authorization: Bearer <access_token>. Catalog list operation. Path parameter collection_id.
- uri
- parentUri
- name
- source
- totalMembers
- pages
- members
- type
- assetId
- assetUri
- folderId
- folderUri
- created
- modified
- lastAccess
- size
- pageCount
- lastPagenum
- favorite
- starred
- shared
- parentId
- tags
- customTags
GET /v1/collections/root-ada-scan/items?page_size=50&order_by=modified&sort_order=desc&metadata=basic HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="collection_listing_v1.json" x-api-key: scan-android-client{ "uri": "/v1/collections/root-ada-scan", "parentUri": null, "name": "Document Cloud", "source": "document_cloud", "totalMembers": 2, "pages": { "nextPageUri": null }, "members": [ { "type": "document", "assetId": "doc-receipt-0412", "assetUri": "/v1/documents/doc-receipt-0412", "name": "Cafe receipt 12 Apr.pdf", "created": "2026-04-12T09:14:22Z", "modified": "2026-04-12T09:15:01Z", "lastAccess": "2026-09-20T18:02:11Z", "size": 245760, "pageCount": 1, "lastPagenum": 1, "favorite": false, "starred": false, "shared": false, "parentId": "root-ada-scan", "parentUri": "/v1/collections/root-ada-scan", "source": "scan", "tags": ["receipt"], "customTags": [] } ] }reconstructed from the scan library's paged document list
Read scanned document metadata
GET
/v1/documents/{documentId}opendataReturns the basic cloud metadata for one scan (name, size, pageCount, source, tags, scanModifiedAt) so the library row and details sheet can render without downloading bytes.
Auth: Authorization: Bearer <access_token>. Catalog metadata operation. Path parameter document_id.
- assetId
- uri
- name
- type
- source
- size
- pageCount
- lastPagenum
- created
- modified
- lastAccess
- scanModifiedAt
- favorite
- starred
- shared
- parentId
- parentUri
- tags
- customTags
- bookmarks
GET /v1/documents/doc-receipt-0412 HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="document_metadata_v1.json" x-api-key: scan-android-client{ "assetId": "doc-receipt-0412", "uri": "/v1/documents/doc-receipt-0412", "name": "Cafe receipt 12 Apr.pdf", "type": "document", "source": "scan", "size": 245760, "pageCount": 1, "lastPagenum": 1, "created": "2026-04-12T09:14:22Z", "modified": "2026-04-12T09:15:01Z", "lastAccess": "2026-09-20T18:02:11Z", "scanModifiedAt": "2026-04-12T09:15:01Z", "favorite": false, "starred": false, "shared": false, "parentId": "root-ada-scan", "parentUri": "/v1/collections/root-ada-scan", "tags": ["receipt"], "customTags": [], "bookmarks": null }reconstructed from the document details sheet rendered without downloading bytes
Create a cloud collection
POST
/v1/collectionsopendataCreates a named child collection under parentUri, applying onDupName when a sibling already uses that name — the New folder action in the scan library.
Auth: Authorization: Bearer <access_token>. Catalog create operation. Vendor JSON content profile for collection creation.
- name
- parentUri
- onDupName
- folderId
- uri
POST /v1/collections HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Content-Type: application/vnd.scan.cloud+json;profile="collection_creation_v1.json" x-api-key: scan-android-client { "name": "Receipts 2026", "parentUri": "/v1/collections/root-ada-scan", "onDupName": "auto_rename" }{ "collectionId": "fld-receipts-2026", "uri": "/v1/collections/fld-receipts-2026", "name": "Receipts 2026", "parentUri": "/v1/collections/root-ada-scan" }reconstructed from the New folder action in the scan library
Upload a scanned document
POST
/v1/documentsopendataUploads a captured page or PDF into the cloud under parentUri with persistence and onDupName options; the returned assetUri feeds conversion and document-action calls.
Auth: Authorization: Bearer <access_token>. Catalog upload operation. Multipart form: options JSON plus the page image or PDF body.
- name
- parentUri
- onDupName
- persistence
- instantUpload
- ignoreContentType
- assetId
- assetUri
- contentType
- size
POST /v1/documents HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Content-Type: multipart/form-data x-api-key: scan-android-client --boundary Content-Disposition: form-data; name="options" Content-Type: application/vnd.scan.cloud+json;profile="document_upload_v1.json" { "name": "Cafe receipt 12 Apr.jpg", "parentUri": "/v1/collections/root-ada-scan", "onDupName": "auto_rename", "persistence": "permanent", "instantUpload": true, "ignoreContentType": false } --boundary Content-Disposition: form-data; name="file"; filename="page.jpg" Content-Type: image/jpeg <binary> --boundary--{ "assetId": "doc-receipt-0412", "assetUri": "/v1/documents/doc-receipt-0412", "name": "Cafe receipt 12 Apr.jpg", "parentUri": "/v1/collections/root-ada-scan", "contentType": "image/jpeg", "size": 1843200 }reconstructed from the save-to-cloud flow after page capture
Create a searchable PDF with OCR
POST
/v1/documents/convertopendataTurns an uploaded scan into a PDF with optional OCR (doOcr, ocrLang, ocrType) and returns a jobUri the client polls until the searchable PDF document is ready.
Auth: Authorization: Bearer <access_token>. Catalog convert operation. Long-running work returns a jobUri to poll.
- assetUri
- name
- parentUri
- doOcr
- ocrLang
- ocrType
- onDupName
- persistence
- showMarkup
- taggedPdfFormat
- jobUri
- status
POST /v1/documents/convert HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Content-Type: application/vnd.scan.cloud+json;profile="convert_v1.json" x-api-key: scan-android-client { "assetUri": "/v1/documents/doc-receipt-0412", "name": "Cafe receipt 12 Apr.pdf", "parentUri": "/v1/collections/root-ada-scan", "doOcr": true, "ocrLang": "en-US", "ocrType": "searchable_image", "onDupName": "auto_rename", "persistence": "permanent", "showMarkup": false, "taggedPdfFormat": "none" }{ "jobUri": "/v1/scancloud/jobs/job-convert-0412", "status": "in progress", "assetUri": "/v1/documents/doc-receipt-0412-pdf" }reconstructed from the OCR-to-PDF conversion shown after a scan is captured
Run document actions (OCR, optimize, encrypt)
POST
/v1/documents/actionsopendataApplies a pipeline of document actions — OCR with lang, optimize, passwordEncrypt / removePasswordEncryption, taggedPdf — to one or more documents and returns a jobUri.
Auth: Authorization: Bearer <access_token>. Catalog actions operation. Vendor JSON content profile for document actions.
- name
- parentUri
- onDupName
- persistence
- assets
- assetUri
- pdfActions
- ocr
- lang
- optimize
- passwordEncrypt
- removePasswordEncryption
- taggedPdf
- jobUri
- status
POST /v1/documents/actions HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Content-Type: application/vnd.scan.cloud+json;profile="document_actions_v1.json" x-api-key: scan-android-client { "name": "Cafe receipt 12 Apr.pdf", "parentUri": "/v1/collections/root-ada-scan", "onDupName": "auto_rename", "persistence": "permanent", "documents": [ {"assetUri": "/v1/documents/doc-receipt-0412-pdf"} ], "actions": [ {"ocr": {"lang": "en-US"}}, {"optimize": {}} ] }{ "jobUri": "/v1/scancloud/jobs/job-actions-0412", "status": "in progress" }reconstructed from the OCR, optimize and password actions on a saved PDF
Poll a document job
GET
/v1/scancloud/jobs/{jobId}opendataPolls a convert, actions or export job by jobUri until status is done (or queued / in progress / failed) and assetResult.uri can be downloaded.
Auth: Authorization: Bearer <access_token>. Path parameter job_id.
- jobUri
- status
- progress
- retryInterval
- assetResult
- id
- name
- mimetype
- uri
GET /v1/scancloud/jobs/job-convert-0412 HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="job_v1.json" x-api-key: scan-android-client{ "jobUri": "/v1/scancloud/jobs/job-convert-0412", "status": "done", "progress": 100, "retryInterval": 0, "assetResult": { "id": "doc-receipt-0412-pdf", "name": "Cafe receipt 12 Apr.pdf", "mimetype": "application/pdf", "uri": "/v1/documents/doc-receipt-0412-pdf" } }reconstructed from the progress indicator shown while conversions run
Mint a document content link
GET
/v1/documents/{documentId}/content-linkopendataReturns a short-lived download link for a cloud document so the app can fetch the OCR'd PDF or original scan bytes from the file store.
Auth: Authorization: Bearer <access_token>. Catalog content-link operation.
- assetUri
- uri
- contentType
- size
GET /v1/documents/doc-receipt-0412-pdf/content-link HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.cloud+json;profile="content_link_v1.json" x-api-key: scan-android-client{ "assetUri": "/v1/documents/doc-receipt-0412-pdf", "uri": "/v1/download/doc-receipt-0412-pdf?token=short-lived", "contentType": "application/pdf", "size": 245760 }reconstructed from the open/share flow that fetches PDF bytes
Fetch a scan thumbnail preview
GET
/v1/documents/{documentId}/previewopendataStreams a direct image preview (format, size) of a cloud document so the scan library can show page thumbnails without downloading the full PDF.
Auth: Authorization: Bearer <access_token>. Catalog preview operation. Query parameters format and size.
- asset_id
- format
- size
GET /v1/documents/doc-receipt-0412-pdf/preview?format=png&size=256 HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: image/png x-api-key: scan-android-client<binary PNG thumbnail bytes>reconstructed from the thumbnail grid in the scan library
Export a PDF to another format
POST
/v1/documents/{documentId}/exportopendataConverts a cloud PDF to another format (format, optional doOcr / ocrLang, imageParams) as an async job — the Export to Word / image action on a scan.
Auth: Authorization: Bearer <access_token>. Catalog export operation. Vendor JSON content profile for export.
- assetUri
- name
- parentUri
- format
- doOcr
- ocrLang
- imageParams
- onDupName
- persistence
- jobUri
- status
POST /v1/documents/doc-receipt-0412-pdf/export HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Content-Type: application/vnd.scan.cloud+json;profile="export_v1.json" x-api-key: scan-android-client { "name": "Cafe receipt 12 Apr.docx", "parentUri": "/v1/collections/root-ada-scan", "format": "docx", "doOcr": true, "ocrLang": "en-US", "onDupName": "auto_rename", "persistence": "permanent" }{ "jobUri": "/v1/scancloud/jobs/job-export-0412", "status": "in progress" }reconstructed from the Export to Word / image action on a scan
Digitize a captured page (AI)
POST
/v1/ai/digitizeopendataSubmits a captured page to the AI digitize service (processingLevel digitized_image, pdf or searchable_pdf, locale) as an async job; the client then polls status_out until completed.
Auth: Authorization: Bearer <access_token> from POST /v1/scancloud/auth/token. Multipart form: contentAnalyzerRequests JSON plus the page image.
- contentAnalyzerRequests
- engines
- executionInfo
- senseiEngine
- digitizeParams
- processingLevel
- locale
- model
- saveIntermediateFiles
- customInstructions
- digitizeOut
- statusOut
- multipartFieldName
- format
- status
- location
POST /v1/ai/digitize HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Content-Type: multipart/form-data --boundary Content-Disposition: form-data; name="contentAnalyzerRequests" Content-Type: application/json { "engines": [ { "executionInfo": { "engine": "digitize-engine-v3" }, "params": { "digitizeParams": { "processingLevel": "searchable_pdf", "locale": "en-US", "model": null, "saveIntermediateFiles": false, "customInstructions": null } }, "outputs": { "digitizeOut": {"multipartFieldName": "outfile", "format": "application/pdf"}, "statusOut": {"multipartFieldName": "status_out", "format": "application/x-ndjson"} } } ] } --boundary Content-Disposition: form-data; name="file"; filename="page.jpg" Content-Type: image/jpeg <binary> --boundary--{ "status": "in progress", "location": "/v1/ai/digitize/tasks/dig-0412" }reconstructed from the app's AI digitize flow for captured pages
Poll digitize job status
GET
/v1/ai/digitize/{taskId}opendataPolls the digitize job until status is completed, error or null so the app can fetch outfile bytes (searchable PDF or digitized image).
Auth: Authorization: Bearer <access_token>. Accept is a vendor job-status media type. Query outputName=status_out and nonMultipart=true. Prefer: respond-partial, wait=10.
- outputName
- nonMultipart
- status
- outputs
- status_out
- code
GET /v1/ai/digitize/dig-0412?outputName=status_out&nonMultipart=true HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Accept: application/vnd.scan.digitize.status+json Prefer: respond-partial, wait=10{ "status": "completed", "outputs": { "status_out": { "code": "200" } } }reconstructed from the digitize progress polling loop
Search cloud documents
POST
/v1/search/queryopendataRuns full-text search across the cloud library with query q, type/scope filters and sort; hits include scanMetadata.createdByScan and pageTypes so the home search can highlight scans.
Auth: Authorization: Bearer <access_token> from POST /v1/scancloud/auth/token.
- q
- limit
- scope
- documentCloudAssetType
- favourite
- parentId
- sortOrder
- sortOrderby
- type
- status
- metrics
- resultSets
- createDate
- modifyDate
- region
- createdByScan
- pageTypes
POST /v1/search/query HTTP/1.1 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.example Content-Type: application/json { "q": "receipt cafe", "limit": 25, "scope": ["document_cloud"], "documentCloudAssetType": ["pdf"], "favourite": false, "sortOrderby": "modifyDate", "sortOrder": "desc" }{ "status": [{"code": "ok"}], "metrics": {"total": 1}, "resultSets": [ { "items": [ { "name": "Cafe receipt 12 Apr.pdf", "createDate": "2026-04-12T09:15:01Z", "modifyDate": "2026-04-12T09:15:01Z", "region": "VA6", "scanMetadata": { "createdByScan": true, "pageTypes": ["receipt"] } } ] } ] }reconstructed from the home search box that filters scan-origin PDFs
Data categories
- identity
- storage-quota
- folders
- documents
- ocr-jobs
- search
- sessions
- digitize
Where teams use this data
Receipt vault with OCR'd PDFs
An expense desk signs in, lists the Document Cloud collection (assetId, name, pageCount, tags, size) and pulls content-link bytes for every scan whose source or scanMetadata.createdByScan marks it as a receipt.
Quota-aware scan ingest
A capture pipeline reads storageUsed / storageQuota / storageRemaining from the account storage endpoint before uploading a page, then either runs PDF conversion with doOcr and ocrLang or posts the page to the AI digitize endpoint with processingLevel searchable_pdf and locale, so each page lands as a searchable PDF under a known parent collection.
Identity and plan gating
A compliance job records userId, email, displayName, countryCode and subscription code from the account profile endpoint so OCR and export entitlements can be audited per Adobe ID rather than per device.
Full-text find across scans
A records search posts q, documentCloudAssetType and sortOrderby to the search endpoint and keeps hits whose scanMetadata.pageTypes include receipt or id-card, then opens the matching document.
Frequently asked questions
How does Adobe Scan authenticate its cloud calls?
The app signs in with an authorization_code or refresh_token grant at POST /v1/scancloud/auth/token and attaches the returned access_token as Authorization: Bearer on later calls, alongside an x-api-key client id. A catalog call then returns the URI and HTTP method for each account, document and job operation.
What identity and quota fields does the account endpoint return?
The profile call returns identity.userId, email, displayName, firstName, lastName, countryCode and language, plus storageQuota, storageUsed, storageRemaining and storageSlop, the storage region, and subscription codes. A dedicated storage call repeats the quota slice for preflight checks before a scan is saved to the cloud.
How does a camera page become a searchable PDF?
The client uploads the page image at POST /v1/documents with a name, parent collection and persistence option, then starts conversion with OCR flags (doOcr, ocrLang, ocrType). The returned jobUri is polled at GET /v1/scancloud/jobs/{jobId} until status is done, and a content-link call mints the downloadable PDF. Extra OCR, optimize or encryption runs as document actions, and the digitize screen instead posts the photo to POST /v1/ai/digitize with processingLevel searchable_pdf.
Can I search only scans, not every cloud file?
POST /v1/search/query accepts q, scope, documentCloudAssetType, favourite and sortOrderby. Hits can carry scanMetadata.createdByScan and pageTypes, so a client can keep camera-origin PDFs and drop files that arrived from other surfaces.
Apps similar to Adobe Scan AI PDF Scanner, OCR
- Microsoft Lens — Microsoft Lens was Microsoft's free document scanner with OCR and export to Word, PowerPoint and OneNote; Microsoft retired the app in early 2026 and moved scanning into the OneDrive app.
- CamScanner — CamScanner is a document scanner with OCR whose free tier requires an account and adds a watermark to exported scans.
- Genius Scan - PDF Scanner — Genius Scan is a scanner app with a clean free tier that requires no account and adds no watermark, while OCR is unlocked as a paid add-on.
- Google Drive — Google Drive's built-in scan button on Android auto-crops and enhances pages and saves them as searchable PDFs in Drive storage.
- vFlat Scan — vFlat Scan is a free scanner whose on-device OCR works offline in about 30 languages and flattens curved book pages, requiring no account and adding no watermarks.
- PDF Scanner & Editor by Kaagaz — Kaagaz Scanner is an Indian-made PDF scanner and maker positioned as a homegrown alternative to CamScanner.
- iScanner — iScanner is an OCR scanner app whose extras can count objects, measure distances and solve math problems from the camera.
Topics
- adobe scan api
- adobe scan document cloud
- adobe scan ocr pdf
- adobe scan access token
- document cloud storage quota
- adobe scan folder listing
- adobe scan search scans
- scanmetadata createdbyscan
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use