- Brand
- Extend
- Category
- AI
- Primary Subcategory
- Document & Message Field Extraction
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.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Extend
Get updates when Extend’s Discoverability Score or category rank changes.
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.
add_evaluation_items
Cancel a queued or in-flight classify run (classify group). Best-effort: a run already finishing may still complete.
cancel_classify_run
Cancel a queued or in-flight split run (split group). Best-effort: a run already finishing may still complete.
cancel_split_run
Cancel a queued or in-flight workflow run (workflows group). Best-effort: a run already finishing may still complete.
cancel_workflow_run
Cancel a queued or in-flight extract run (extract group). Best-effort: a run already finishing may still complete.
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. Async: a status: "running" result with a runId is not an error — resume with get_classify_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/classification/response-format.md (get_documentation).
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.
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.
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.
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).
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.
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).
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.
create_extractor
Permanently delete a classify run and its stored outputs (classify group). Cannot be undone.
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.
delete_file
Permanently delete a parse run and its stored outputs (parse group). Cannot be undone.
delete_parse_run
Permanently delete a split run and its stored outputs (split group). Cannot be undone.
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.
delete_webhook_endpoint
Permanently delete a webhook subscription (webhooks group). The endpoint and its global events are unaffected. This cannot be undone.
delete_webhook_subscription
Permanently delete a workflow run and its stored outputs (workflows group). Cannot be undone.
delete_workflow_run
Permanently delete an edit run and its stored outputs (edit group). Cannot be undone.
delete_edit_run
Permanently remove one ground-truth item from an evaluation set (evaluations group). Past run metrics are unaffected. This cannot be undone.
delete_evaluation_item
Permanently delete an extract run and its stored outputs (extract group). Cannot be undone.
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.
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. Async: a status: "running" result with a runId is not an error — resume with get_form_detection_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
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. Async: a status: "running" result with a runId is not an error — resume with get_extract_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape (output.value, per-field metadata, confidence, citations) is documented at https://docs.extend.ai/extraction/response-format.md (get_documentation).
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. truncated: true means the page was cut at a section boundary to fit the response budget; the returned url has the full page. 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. templateId runs a saved edit template instead of file; its stored schema/instructions apply unless overridden below. Output is a pointer { id, presignedUrl } to the filled PDF; the URL expires in ~15 minutes (re-fetch with get_file). Async: a status: "running" result with a runId is not an error — resume with get_edit_run passing that runId, the same workspaceId and environment, and wait: true, repeating until the status is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
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. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/classification/response-format.md (get_documentation).
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. Form detection runs have no list endpoint — keep the run ID. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
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. Supports pageRange/maxChars/rawBlocks output slicing as in parse_document. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. truncated: true means the markdown was cut at maxChars — re-call with pageRange for the pages you need, or rawBlocks: true for block-level output. pageRange/maxChars/rawBlocks are not remembered between calls; pass them again when resuming with get_parse_run. Output shape is documented at https://docs.extend.ai/parsing/response-format.md (get_documentation).
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. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/splitting/response-format.md (get_documentation).
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. Workflow runs commonly take minutes to hours — repeated running responses are normal. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Statuses: PROCESSED; FAILED (retryable: true means the failureReason is usually transient and one retry is reasonable); NEEDS_REVIEW (paused for a human reviewer in the dashboard — share dashboardUrl with the user and re-check the run after they finish; do not retry or re-submit); REJECTED (a reviewer rejected the run in the dashboard — final; dashboardUrl has their reasoning); CANCELLED.
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. Edit runs have no list endpoint — keep the run ID. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. output.editedFile.presignedUrl expires in ~15 minutes (re-fetch with get_file). Output shape is documented at https://docs.extend.ai/editing/response-format.md (get_documentation).
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. While status is "running", call again with wait: true (same workspaceId and environment) until it is terminal; never re-submit the document. On UNAUTHORIZED or NOT_FOUND, re-call get_me for the granted targets. Output shape is documented at https://docs.extend.ai/extraction/response-format.md (get_documentation).
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.
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. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_classify_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
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. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_parse_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
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. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_split_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
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.
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.
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; if it is still non-terminal afterward, call again with wait: true rather than re-submitting. 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.
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. While non-terminal, call again with wait: true; do not re-submit the batch. Individual results: list_extract_runs filtered by batchId (status: "FAILED" for per-run failure reasons). Batch semantics: https://docs.extend.ai/general/batch-processing.md (get_documentation).
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.
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.
get_file
Get the status and uploaded file ids of an upload link created by upload_file (files group). Default is one instant status check; wait: true blocks until the user finishes or the wait budget runs out. Statuses: pending (the user has not completed the upload — call again with wait: true once they say they are done); completed (files lists the uploaded file ids, usable as { "id": "file_..." } inputs in any file-accepting tool); expired or cancelled (the link is no longer usable — call upload_file for a fresh one).
get_file_upload
List a classifier's published (immutable) versions (classify group). Fetch one version's config with get_classifier. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
list_classifier_versions
List the workspace's classifiers, newest first (classify group). Fetch a specific one's config with get_classifier. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
list_classifiers
List recent classify runs, newest first (classify group). Filter rather than paginate: status, classifierId, batchId, fileNameContains. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
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. hasMore: true means more items exist — prefer narrowing filters over paginating, and pass nextPageToken only when every item is needed.
list_evaluation_items
Extend ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Extend's ChatGPT Plugin 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-10-23, Extend competes with Campaign Requirement Extractor, Content Brief Extractor, DocPipe, DocVision AI, e-invoices.it, Kamai, Parsewise, Photon Commerce and 1 more 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.