Skip to main content
Every document processed by FlexOrch receives a quality score between 0 and 100 and a corresponding grade from A to D. These signals let you filter high-confidence records into your datasets and flag documents that need review before you use them for LLM training or analytics.

Quality Grades

GradeScore RangeWhat It Means
A85–100High quality — key fields extracted, low noise
B65–84Good — minor gaps or slight noise
C45–64Moderate — notable extraction issues or OCR problems
D0–44Low — significant problems; review before using

Factors That Affect the Score

Three signals combine to produce the final score:
  • Field fill rate — The proportion of expected fields for the detected document type that were successfully extracted. A low fill rate drives the score down.
  • Noise ratio — The share of the document made up of non-informative content such as repeated headers, page numbers, or boilerplate. Higher noise lowers the score.
  • OCR confidence — For scanned documents and images, a low OCR confidence score (below 0.7) automatically caps the grade at C, regardless of how well fields were extracted.

Accessing Quality Data

Quality information is included in every completed job response:
{
  "processing_summary": {
    "quality": {
      "score": 91,
      "grade": "A",
      "field_fill_rate": 0.94,
      "ocr_confidence": null
    }
  }
}
ocr_confidence is null when OCR was not used — for example, a text-based PDF or a DOCX file.
Monitor how document quality changes over time on the Usage → Quality tab in the platform, or pull the trend data directly from the API:
curl "https://api.flexorch.com/v1/usage/quality-trend?period=30d" \
  -H "X-API-KEY: dfx_your_key_here"

Filtering by Grade

Use the Datasets → Ready to Build tab in the platform to filter completed jobs by grade before you build a dataset. You can also apply grade filters in your own pipeline using the Python SDK:
from flexorch_sdk import FlexOrch

client = FlexOrch(api_key="dfx_your_key_here")

# Only include grade A and B jobs in the dataset
good_jobs = [j for j in client.jobs.list() if j.quality_grade in ("A", "B")]
dataset = client.datasets.build(job_ids=[j.id for j in good_jobs])
Filtering to grades A and B before building a dataset is the fastest way to improve downstream LLM fine-tuning results.

Submitting Feedback

If a quality score looks wrong — for example, a document graded C that you know is clean — submit feedback from the Jobs page using the thumbs up / thumbs down control, or via the API:
curl -X POST "https://api.flexorch.com/v1/jobs/{id}/feedback" \
  -H "X-API-KEY: dfx_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"rating": "negative", "issue": "wrong_fields"}'
Feedback is used to improve classification and extraction models over time.