Document Fraud Detection

Detecting tampering and forgery on PDF and image documents

What is Document Fraud Detection?

Document Fraud Detection checks an uploaded file for signs that it was edited, forged, or generated by AI. It helps you find documents that need a closer look before you rely on the data in them.

The checks inspect the file itself: its metadata, edit history, digital signatures, fonts, hidden content, and pixels. They don't depend on a document's layout, so you can use them on invoices, receipts, pay stubs, tax forms, and other document types.

📘

How this differs from bank statement fraud checks

Fraud Detection for bank statements also analyzes extracted transactions, such as balances and repeated transactions. Document Fraud Detection doesn't read or validate the values on a document, so a document with an incorrect total and no signs of file tampering can still score as clean.

Supported files

File typeExtensionsMaximum size
PDF.pdf50 MB
Image.jpg, .jpeg, .png50 MB

Other file types, such as TIFF, aren't analyzed. Password-protected PDFs can't be analyzed, so remove the password before you submit the file.

Enable Document Fraud Detection

To turn on Document Fraud Detection for your account, contact your Docsumo account manager.

The Fraud Analysis toggle in a document type's settings applies to bank statement document types only.

Fraud report

Each document gets a report with these parts:

NameDescription
Risk Score (risk_score)Overall score from 0 to 100. A higher score means more signs of tampering.
Risk Level (risk_level)The label for the score: clean, low, medium, high, or critical.
Findings (findings)Each signal that the checks found, with its severity and details.
Informational (informational)Neutral observations that add no points, such as a valid digital signature.
Checks Passed (checks_passed)Groups of checks that found nothing.
Check Errors (check_errors)Checks that couldn't run. See Errors.

Risk score

The risk level comes from the risk score:

Risk ScoreRisk LevelWhat it means
0-14cleanNo meaningful signs of tampering.
15-34lowWeak signals that rarely need action on their own.
35-59mediumSuspicious signals that can also appear in genuine documents.
60-79highStrong signs of tampering. Review the document manually.
80-100criticalVery strong signs of tampering. Review the document manually before you accept it.

Each finding adds points based on its severity, up to a maximum of 100:

SeverityPointsWhat it means
High25Strong signal of tampering that warrants a manual review.
Medium10Suspicious, but can occur in genuine documents.
Low3Weak signal that's only useful alongside other findings.
Info0Neutral observation.

Some findings also set a minimum score, so a single finding can move a document to a higher risk level.

This scale is different from the Fraud Score and Authenticity Score on bank statements, so don't compare the two directly.

Findings

Each finding has these fields:

FieldDescription
Check (check)The name of the check. See Checks.
Severity (severity)high, medium, or low. Findings with info severity are listed under Informational.
Detail (detail)A plain-language explanation of what was found.
Pages (pages)The page numbers where the signal was found.
Locations (locations)The position of the signal on the page.

Pages and locations appear only when a signal can be tied to a part of the page. There's no position for document-wide checks, such as metadata or edit history.

For example, this is the report for a sample invoice whose total was edited with an online PDF tool. It has a Risk Score of 100 and a Risk Level of critical.

CheckSeverityDetailPages
metadata_online_editor_detectedHighAn online PDF editing tool was found in the document metadata.
incremental_update_no_signatureHighThe document has 2 revisions and no digital signature.
structure_duplicate_objectsHighDuplicate object numbers were found, which happens when content is injected into a file.
content_stream_white_textHighWhite text was drawn on the page, which is a common way to hide original content.1

Checks

PDFs and images go through different checks. These tables list the main checks, and each finding's detail explains what was found.

PDF checks

CheckNameDescription
Metadatametadata_date_inversionThe creation date is later than the modification date.
metadata_future_dateThe modification date is in the future.
metadata_online_editor_detectedThe metadata names an online PDF editor.
metadata_producer_consumer_toolThe file was created or saved with desktop software, such as a word processor.
metadata_producer_fraud_generatorThe file was produced with a PDF library often used to forge documents.
metadata_producer_mismatchThe file's two metadata records name different producers.
metadata_strippedThe creator and producer information is missing.
Edit historyincremental_update_no_signatureThe file was saved again after it was created, with no digital signature.
incremental_update_multiple_revisionsThe file has several layers of edits.
linearized_pdf_modifiedA PDF optimized for web viewing was changed after it was optimized.
Digital signaturesignature_partial_coverageThe signature doesn't cover the whole file, so content may have been added after signing.
signature_no_byte_rangeA signature field exists but doesn't define which content it signs.
signature_cert_expiredThe signing certificate has expired.
signature_cert_self_signedThe signing certificate is self-signed.
signature_weak_digest_md5The signature uses the broken MD5 algorithm.
signature_weak_digest_sha1The signature uses the deprecated SHA-1 algorithm.
shadow_attack_unsigned_revisionContent was changed in an unsigned revision after signing.
Hidden contenthidden_content_white_rectangle_over_textA white shape covers existing text.
hidden_content_invisible_textThe page contains white or invisible text.
content_stream_white_textWhite text was drawn on the page, which can hide original content.
hidden_content_freetext_overlayA text annotation sits on top of page content.
hidden_content_optional_layersThe file contains hidden layers.
hidden_content_redaction_annotationsA redaction wasn't applied, so the original content is still in the file.
Fontsfont_size_inconsistencyA font appears at slightly different sizes, which can point to an edited value.
font_kerning_anomalyCharacter spacing differs from the rest of the document.
font_editor_injectedGeneric fonts were added alongside the document's own fonts.
font_page_inconsistencySome pages use very different fonts from the rest of the document.
font_duplicate_subset_prefixSeveral font objects share a subset ID, which doesn't occur in genuine files.
font_subset_extra_charsAn embedded font contains characters that aren't in the visible text.
Images and pixelsimage_full_page_coverageSome pages are full-page images and others aren't, which can mean pages were replaced.
image_low_dpi_screenshotImages have a low resolution, which is typical of screenshots.
image_mixed_dpiImages have very different resolutions, which suggests they came from different sources.
pixel_ela_elevatedParts of a scanned page show signs of being compressed again.
pixel_sift_copy_movePart of a scanned page was copied and pasted elsewhere.
pixel_noise_inconsistencyNoise levels vary across a scanned page.
File structurestructure_duplicate_objectsDuplicate object numbers were found, which happens when content is injected.
structure_xref_offset_invalidThe file's internal index points to the wrong locations.
structure_stream_length_mismatchThe declared length of the content doesn't match its actual length.
structure_version_feature_mismatchThe file uses features newer than the PDF version it declares.
structure_producer_style_mismatchThe file's structure doesn't match the software that it claims produced it.
Form fieldsform_field_value_ap_mismatch_numericA numeric form value differs from the value displayed on the page.
form_field_value_ap_mismatchA form value differs from the value displayed on the page.
Active contentsuspicious_javascriptThe file contains JavaScript.
suspicious_launch_actionThe file contains an action that can run an external program.
suspicious_embedded_filesOther files are embedded in the PDF.

Image checks

CheckNameDescription
Pixelsimage_ela_elevatedParts of the image show signs of being compressed again. JPEG only.
image_sift_copy_movePart of the image was copied and pasted elsewhere.
image_clone_detectedThe image contains duplicate regions.
image_noise_inconsistencyNoise levels vary across the image, which suggests combined content.
image_dct_anomalyThe compression profile suggests the image was saved again. JPEG only.
image_ycbcr_seamColor anomalies suggest content was spliced in.
Metadataimage_exif_heavy_editorThe metadata names a full image editor, such as Adobe Photoshop.
image_exif_editing_softwareThe metadata names a light editing tool.
image_exif_strippedThe image was re-encoded and has no camera metadata.
image_exif_date_anomalyThe dates in the metadata don't agree.
image_exif_gps_presentThe metadata contains GPS coordinates.
AI generationimage_ai_generated_metadataThe metadata names an AI image generator.
image_ai_generated_indicatorsThe image has no metadata at all, which is common in AI-generated images.
image_ai_generated_spectralThe image has frequency patterns typical of AI image generators.
image_ai_generated_textureThe image's noise is unusually uniform.
🚧

There might be erroneous fraud detection

A failed check doesn't prove that a document is fraudulent. Treat the risk level as a signal for review. Genuine documents can trigger checks for reasons like these:

  • The PDF was exported from a desktop app such as Microsoft Word. This alone gives a medium risk level.
  • The PDF was compressed, merged, or annotated after it was issued, including with an online tool. This can give a high risk level.
  • The image was exported, or was sent through an app that removed its metadata. This alone can give a medium risk level.
  • The scan or image quality is low.

Some finding details mention bank statements or banking software because these checks were first built for bank statements. The checks still apply to other document types.

Errors

SituationResult
A PDF can't be opened because it's corruptRisk Score 100, Risk Level critical, and a parse_failure finding.
An image can't be openedAn error is returned with Risk Score 0 and Risk Level clean. Treat the image as not analyzed.
A check fails while the others runThe failure is listed in Check Errors. The score doesn't include that check, so a low score may be incomplete.
The file type isn't supported, or the PDF is password-protectedThe file isn't analyzed and an error is returned.

Did this page help you?