Integration details
Description
Parse, extract, classify, and split documents from chat: pull fields, tables, and line items out of PDFs, images, Office files, and spreadsheets, identify document types, break bundles into separate documents, and fill PDF forms. Build and test reusable extractors, classifiers, and workflows on real documents, then run them at scale in your Extend workspace.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Document & Message Field Extraction
- Secondary Subcategories
- None listed
- Brand
- Extend
- Access
- Account required
- First tracked
- 2026-09-08
- Tool count
- 86
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT Document & Message Field Extraction
View Category86 tools agents can invoke
Bulk-add ground-truth examples (1-100 per call) to an evaluation set (evaluations group). Each item pairs an already-uploaded file with the output the resource SHOULD produce for it. Follow any llmContext guidance included in results.
add_evaluation_items
Cancel a queued or in-flight classify run (classify group). Best-effort: a run already finishing may still complete. Follow any llmContext guidance included in results.
cancel_classify_run
Cancel a queued or in-flight split run (split group). Best-effort: a run already finishing may still complete. Follow any llmContext guidance included in results.
cancel_split_run
Cancel a queued or in-flight workflow run (workflows group). Best-effort: a run already finishing may still complete. Follow any llmContext guidance included in results.
cancel_workflow_run
Cancel a queued or in-flight extract run (extract group). Best-effort: a run already finishing may still complete. Follow any llmContext guidance included in results.
cancel_extract_run
Categorize a document into one of a set of types, e.g. MSA vs SOW vs NDA (classify group), using a saved classifier or an inline list of classifications. Provide exactly one of classifier or config. Inline config.classifications must include one entry with type: "other" as the fallback and unique ids per entry. Returns the winning type with a confidence score. Creates a classify run: may return status: "running" with a runId — normal, not an error; poll it with get_classify_run. Follow any llmContext guidance included in results.
classify_document
Create a saved, reusable classifier (classify group). Start from config (inline classifications list — call get_documentation with https://docs.extend.ai/classification/configuration.md before hand-authoring one) or cloneClassifierId (copy another classifier's draft config) — mutually exclusive; name alone creates an empty draft. There is no generate mode (extractors only). The draft is the only mutable surface — edit it with update_classifier, freeze it with publish_classifier_version, run it with classify_document. Follow any llmContext guidance included in results.
create_classifier
Create a saved, reusable splitter (split group). Start from config (inline split classifications — call get_documentation with https://docs.extend.ai/splitting/configuration.md before hand-authoring one) or cloneSplitterId (copy another splitter's draft config) — mutually exclusive; name alone creates an empty draft. The draft is the only mutable surface — edit it with update_splitter, freeze it with publish_splitter_version, run it with split_document. Follow any llmContext guidance included in results.
create_splitter
Register an HTTPS URL to receive Extend events (webhooks group). CRITICAL: the response's signingSecret is shown ONLY on this call — store it immediately; it cannot be retrieved later. Receivers verify HMAC-SHA256 of "v0:{timestamp}:{body}" against it (reject timestamps older than 5 minutes). enabledEvents here are workspace-global and NOT every event type is valid globally: resource-run events such as workflow_run.completed are rejected here and must instead be scoped to a specific resource via create_webhook_subscription (create the endpoint with enabledEvents [], then subscribe it to the workflow/extractor/etc.). Setting up webhooks by hand? Call get_documentation with https://docs.extend.ai/webhooks/configuration.md first. Follow any llmContext guidance included in results.
create_webhook_endpoint
Subscribe an existing webhook endpoint to events from ONE specific extractor, classifier, splitter, or workflow (webhooks group) — deliveries for other resources are unaffected. Use this instead of global enabledEvents when only some resources matter. Configuration rules: call get_documentation with https://docs.extend.ai/webhooks/configuration.md first (event catalog: https://docs.extend.ai/webhooks/events.md). Follow any llmContext guidance included in results.
create_webhook_subscription
Create a workflow — a multi-step document pipeline (workflows group): parse → extract/classify/split → validations → human review. name alone creates an empty draft; steps builds the graph up front (call get_documentation with https://docs.extend.ai/workflows/configuring-workflows.md before hand-authoring a step graph). The draft is the only mutable surface — edit with update_workflow, freeze with deploy_workflow_version, run with run_workflow. Follow any llmContext guidance included in results.
create_workflow
Create an evaluation set — a named collection of ground-truth examples scoped to ONE extractor, classifier, or splitter via entityId (evaluations group). The iteration loop: create a set → add items with add_evaluation_items → publish a new version of the resource → run_evaluation against that version → read accuracy metrics with get_evaluation_run. New to evaluations? Call get_documentation with https://docs.extend.ai/evaluation/overview.md first (set authoring in detail: https://docs.extend.ai/evaluation/creating-evaluation-sets.md). Follow any llmContext guidance included in results.
create_evaluation_set
Create a saved, reusable extractor (extract group). Three starting points, mutually exclusive: config (inline schema — call get_documentation with https://docs.extend.ai/extraction/schema.md BEFORE writing one by hand), cloneExtractorId (copy another extractor's draft config), or generate (Extend writes the schema from 1-5 sample documents plus optional instructions; no docs needed); name alone creates an empty draft. The draft is the only mutable surface — edit it with update_extractor, freeze it with publish_extractor_version, run it with extract_data. Follow any llmContext guidance included in results.
create_extractor
Permanently delete a classify run and its stored outputs (classify group). Cannot be undone. Follow any llmContext guidance included in results.
delete_classify_run
Permanently delete an uploaded file from Extend (files group). Runs that already processed the file keep their outputs, but the file's bytes and parsed contents are gone. This cannot be undone. Follow any llmContext guidance included in results.
delete_file
Permanently delete a parse run and its stored outputs (parse group). Cannot be undone. Follow any llmContext guidance included in results.
delete_parse_run
Permanently delete a split run and its stored outputs (split group). Cannot be undone. Follow any llmContext guidance included in results.
delete_split_run
Permanently delete a webhook endpoint (webhooks group). This ALSO deletes every subscription attached to it, and deliveries stop immediately. This cannot be undone. Follow any llmContext guidance included in results.
delete_webhook_endpoint
Permanently delete a webhook subscription (webhooks group). The endpoint and its global events are unaffected. This cannot be undone. Follow any llmContext guidance included in results.
delete_webhook_subscription
Permanently delete a workflow run and its stored outputs (workflows group). Cannot be undone. Follow any llmContext guidance included in results.
delete_workflow_run
Permanently delete an edit run and its stored outputs (edit group). Cannot be undone. Follow any llmContext guidance included in results.
delete_edit_run
Permanently remove one ground-truth item from an evaluation set (evaluations group). Past run metrics are unaffected. This cannot be undone. Follow any llmContext guidance included in results.
delete_evaluation_item
Permanently delete an extract run and its stored outputs (extract group). Cannot be undone. Follow any llmContext guidance included in results.
delete_extract_run
Deploy the workflow's current draft as a new immutable version (workflows group). Unlike extractor/classifier/splitter publishing there is NO releaseType — workflow versions are integer deploy numbers ("1", "2", ...) with an optional display name referenced at run time. Pass steps to deploy that graph instead of the draft. Deployed versions never change — keep iterating on the draft. Follow any llmContext guidance included in results.
deploy_workflow_version
Detect the fillable fields in a PDF form and return an edit schema (edit group): each property is a detected field with its type (text/checkbox/radio/dropdown/signature/table), page index, and bounding box. Use it to see what a form asks for, or as the scaffold for a structured fill — set extend_edit:value on each field and pass the populated schema to edit_pdf. Pass inputSchema to re-run detection against an existing schema (mapping mode) — for the edit-schema rules, call get_documentation with https://docs.extend.ai/editing/configuration.md first. Inspect runs with get_form_detection_run. Follow any llmContext guidance included in results.
detect_form_fields
Extract specific structured values (totals, line items, dates, names, tables) from a document (extract group) using a saved extractor, an inline JSON Schema, or schema-less inference. If the user says "OCR" but wants specific values out, use this tool; for the raw text/markdown of the pages use parse_document instead. Provide exactly one of extractor or config, or omit both for schema-less inference (guided by config.extractionRules when config has no schema; not usable with package). If a saved extractor turns out not to exist, rerun THIS tool without the extractor (schema-less) — do not fall back to parse_document for value extraction. For one merged result across 2-50 related documents, pass package instead of file. detail: "full" returns per-field source citations and confidence — the only way to prove where a value came from (provenance); parsing cannot cite. Creates an extract run: may return status: "running" with a runId — normal, not an error; poll it with get_extract_run. Follow any llmContext guidance included in results.
extract_data
Fetch an Extend docs page as markdown, live from docs.extend.ai. Pass a URL from a tool description, an error's docUrl, or a search_documentation result. Always available, no workspace targeting.
get_documentation
Fill form fields in a PDF and return the edited file (edit group). Values come from instructions (free-form prose, e.g. "name is Acme Corp; date is 2026-04-15") and/or schema (an edit schema from detect_form_fields with extend_edit:value set per field; extend_edit:image with an image_url for signature images). The document passed here must be the TARGET form, not the source you read values from — parse or extract the source first, then fill. Before authoring a schema fill by hand, call get_documentation with https://docs.extend.ai/editing/configuration.md and follow it. Output is a pointer { id, presignedUrl } to the filled PDF; the URL expires in ~15 minutes (re-fetch with get_file). Inspect runs with get_edit_run. Follow any llmContext guidance included in results.
edit_pdf
Get the state and output of a classify run (classify group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry (call again to keep waiting). Follow any llmContext guidance included in results.
get_classify_run
Get the state and output of a form detection run (edit group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry (call again to keep waiting). Form detection runs have no list endpoint — keep the run ID. Follow any llmContext guidance included in results.
get_form_detection_run
Get the state and output of a parse run (parse group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry (call again to keep waiting). Supports pageRange/maxChars/rawBlocks output slicing as in parse_document. Follow any llmContext guidance included in results.
get_parse_run
Get the state and output of a split run (split group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry (call again to keep waiting). Follow any llmContext guidance included in results.
get_split_run
Get the state and output of a workflow run (workflows group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry (call again to keep waiting). Workflow runs commonly take minutes to hours — repeated running responses are normal. Follow any llmContext guidance included in results.
get_workflow_run
Get the state and output of an edit run (edit group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry (call again to keep waiting). Edit runs have no list endpoint — keep the run ID. Follow any llmContext guidance included in results.
get_edit_run
Get the state and output of an extract run (extract group) — resume a status: "running" run or inspect a failed one. wait: true blocks until terminal or wait-budget expiry (call again to keep waiting). Follow any llmContext guidance included in results.
get_extract_run
Get a classifier with its draft config, or one specific version's config via version (classify group). Use list_classifiers to discover IDs. Follow any llmContext guidance included in results.
get_classifier
Get the aggregate status of a classify batch (classify group) submitted by run_classify_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. Follow any llmContext guidance included in results.
get_classify_batch
Get the aggregate status of a parse batch (parse group) submitted by run_parse_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. Follow any llmContext guidance included in results.
get_parse_batch
Get the aggregate status of a split batch (split group) submitted by run_split_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. Follow any llmContext guidance included in results.
get_split_batch
Get a splitter with its draft config, or one specific version's config via version (split group). Use list_splitters to discover IDs. Follow any llmContext guidance included in results.
get_splitter
Get a workflow with its draft step graph, or one specific deployed version's steps via version (workflows group). Use list_workflows to discover IDs. Follow any llmContext guidance included in results.
get_workflow
Get an evaluation run's status and accuracy metrics — this is the ONLY tool that returns them, not a get-batch tool (evaluations group). An evaluation is an async job: a fresh run reports PROCESSING, so pass wait: true to block until it finishes instead of polling in a loop. Metrics by resource type: extractors { accuracy, fieldMetrics per field path — each field has countExpected/countAccurate, and accuracy is aggregated across items, not per-item }; classifiers { accuracy, classificationMetrics with precision/recall/f1 per type }; splitters { precision, recall, f1, split counts }. Terminal statuses: PROCESSED, FAILED, CANCELLED. Follow any llmContext guidance included in results.
get_evaluation_run
Get the aggregate status of an extract batch (extract group) submitted by run_extract_batch. wait: true polls until terminal. Statuses: PENDING, PROCESSING, PROCESSED, FAILED, CANCELLED. Follow any llmContext guidance included in results.
get_extract_batch
Get an extractor with its draft config, or one specific version's config via version (extract group). Use list_extractors to discover IDs. Follow any llmContext guidance included in results.
get_extractor
Get a file's metadata and a fresh presigned download URL — expires in ~15 minutes, re-call to refresh (files group). Set contents to also return parsed text; contents: null means "not parsed yet", not an error (run parse_document first). Split-produced child files carry parentSplit (source file, page range) in metadata. Follow any llmContext guidance included in results.
get_file
Check an upload link created by request_file_upload and get the uploaded file ids (files group). Call it on the user's message after they were shown the link — never in the same turn that shared it. Default is one instant status check; wait: true blocks until the user finishes or the wait budget runs out (call again to keep waiting). Follow any llmContext guidance included in results.
get_file_upload
List a classifier's published (immutable) versions (classify group). Fetch one version's config with get_classifier. Follow any llmContext guidance included in results.
list_classifier_versions
List the workspace's classifiers, newest first (classify group). Fetch a specific one's config with get_classifier. Follow any llmContext guidance included in results.
list_classifiers
List recent classify runs, newest first (classify group). Filter rather than paginate: status, classifierId, batchId, fileNameContains. Follow any llmContext guidance included in results.
list_classify_runs
List an evaluation set's items — file pairings only; expected outputs are not included in summaries (evaluations group). Item IDs feed update_evaluation_item / delete_evaluation_item and subset runs. Follow any llmContext guidance included in results.
list_evaluation_items
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Extend alternatives on ChatGPT?
As of 2026-09-08, Extend competes with Content Brief Extractor, Kamai, Photon Commerce, Talonic in ChatGPT Document & Message Field Extraction, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.