Archived Benchmark

Since performance on this benchmark has saturated, we no longer run this benchmark on new model releases. Previous results are preserved here for posterity.

Proprietary

MortgageTax

Updated 9/1/2026

Evaluating reading and understanding tax certificates as images

As of September 1, 2026, Claude Opus 5 ranks first on MortgageTax with 72.06%, followed by Claude Fable 5.1 (70.79%) and Claude Opus 4.7 (70.27%).

MortgageTaxReading tax certificate images
ACCURACY

MortgageTax leaderboard

Rank Model Accuracy Cost In / Out Latency
1 Claude Opus 5 72.06% $5 / $25 7.98s
2 Claude Fable 5.1 70.79% $10 / $50 14.98s
3 Claude Opus 4.7 70.27% $5 / $25 16.10s
4 Claude Sonnet 5 70.03% $2 / $10 28.67s
5 Claude Opus 4.8 69.91% $5 / $25 20.81s
6 Gemini 3.1 Pro Preview (02/26) 69.40% $2 / $12 23.62s
7 Gemini 3 Pro (11/25) 69.08% $2 / $12 25.60s
8 Claude Fable 5 68.92% $10 / $50 16.10s
9 Gemini 2.5 Pro 68.92% $1.25 / $10 24.01s
10 GPT 5.5 68.76% $5 / $30 28.24s
11 Gemini 3 Flash (12/25) 68.72% $0.5 / $3 12.84s
12 Gemini 3.5 Flash Lite 68.68% $0.3 / $2.5 4.88s
13 Claude 3.7 Sonnet (Nonthinking) 68.68% $3 / $15 5.67s
14 Claude Opus 4.5 (Nonthinking) 68.68% $5 / $25 10.53s
15 Claude Opus 4.6 (Thinking) 68.52% $5 / $25 27.16s
16 MiniMax-M3 68.36% $0.6 / $2.4 26.76s
17 GPT 5.4 (xhigh) 68.32% $2.5 / $15 45.00s
18 Qwen 3.6 27B 68.28% $0.6 / $3.6 42.07s
19 Gemini 3.5 Flash 68.12% $1.5 / $9 11.43s
20 Gemini 3.1 Flash Lite Preview 68.04% $0.25 / $1.5 5.37s
21 Qwen 3.6 Plus 67.97% $0.5 / $3 78.18s
22 Claude Sonnet 4.6 67.73% $3 / $15 29.74s
23 Claude Opus 4.5 (Thinking) 67.69% $5 / $25 28.17s
24 Gemini 3.6 Flash 67.61% $1.5 / $7.5 9.24s
25 Qwen 3.5 Flash 67.37% $0.1 / $0.4 36.82s
26 GPT-5.6 Terra 67.33% $2 / $12 6.32s
27 GPT-5.6 Luna 67.29% $0.2 / $1.2 22.84s
28 GPT-5.6 Sol 67.29% $4 / $20 12.62s
29 Gemini 2.5 Pro Exp 67.17% $1.25 / $10 8.91s
30 GPT 5.2 67.13% $1.75 / $14 70.67s
31 GPT 5 Mini 66.89% $0.25 / $2 24.86s
32 Claude 3.7 Sonnet (Thinking) 66.85% $3 / $15 13.59s
33 Gemini 3.7 Flash 66.65% $1.5 / $7.5 4.11s
34 Kimi K2.5 66.53% $0.6 / $3 79.79s
35 Kimi K3 66.34% $3 / $15 78.94s
36 Qwen 3.7 Plus 66.18% $0.4 / $1.6 60.55s
37 Muse Spark 1.1 66.14% $1.25 / $4.25 24.82s
38 GPT 4.1 65.94% $2 / $8 5.03s
39 Kimi K2.6 65.82% $0.95 / $4 109.76s
40 o3 65.70% $2 / $8 21.22s
41 GPT 4.1 Mini 65.50% $0.4 / $1.6 4.60s
42 GPT 5 65.45% $1.25 / $10 62.83s
43 Muse Spark 1.2 65.42% $1.25 / $4.25 44.62s
44 Gemini 3.8 Flash 65.34% $1.5 / $7.5 14.79s
45 Qwen 3.8 27B 64.94% $0.5 / $3 79.95s
46 o4 Mini 64.83% $1.1 / $4.4 13.00s
47 Grok 4.6 64.19% $2 / $6 8.55s
48 Claude 3.5 Sonnet Latest 64.07% $3 / $15 4.22s
49 Qwen 3.8 Max 63.99% $2 / $6 47.50s
50 Claude Sonnet 4.5 (Thinking) 63.99% $3 / $15 47.62s
51 Inkling 63.99% $1 / $4.05 69.11s
52 GPT 5.4 Mini 63.51% $0.75 / $4.5 2m06s
53 Gemini 2.5 Flash Preview (9/25) (Nonthinking) 62.60% $0.3 / $2.5 7.27s
54 Claude Sonnet 4 (Nonthinking) 62.47% $3 / $15 8.42s
55 Inkling Small 62.28% $0.3 / $1.2 112.21s
56 Claude Haiku 4.5 (Thinking) 62.16% $1 / $5 29.79s
57 Magistral Small 1.2 (09/2025) 62.12% $0.5 / $1.5 10.65s
58 Gemini 2.5 Flash Preview (9/25) (Thinking) 61.92% $0.3 / $2.5 18.33s
59 Grok 4.5 61.80% $2 / $6 117.46s
60 Gemma 4 31B IT 61.37% $0 / $0 41.93s
61 GPT 5.1 61.37% $1.25 / $10 46.25s
62 Mistral Small 3.1 (03/2025) 61.21% $0.075 / $0.3 8.31s
63 Claude Opus 4.1 (Nonthinking) 61.09% $15 / $75 10.06s
64 GPT 4o (2024-08-06) 60.97% $2.5 / $10 7.36s
65 Qwen 3.5 Plus 60.77% $0.4 / $2.4 62.08s
66 Gemini 2.0 Flash Exp 60.37% $0.075 / $0.3 2.80s
67 Gemini 2.0 Flash (001) 59.66% $0.1 / $0.4 3.79s
68 MiMo V2.5 59.26% $0.14 / $0.28 32.94s
69 GPT 5.4 Nano 59.10% $0.2 / $1.25 14.53s
70 Claude Opus 4 (Nonthinking) 58.59% $15 / $75 13.76s
71 Llama 4 Maverick 58.51% $0.22 / $0.88 2.72s
72 Gemini 2.5 Flash Preview 4/17 (Nonthinking) 58.43% $0.3 / $2.5 3.56s
73 Llama 4 Scout 57.75% $0.18 / $0.59 2.43s
74 Gemini 2.5 Flash Lite (9/25) (Thinking) 57.55% $0.1 / $0.4 28.21s
75 Gemini 2.5 Flash Preview 4/17 (Thinking) 57.51% $0.3 / $2.5 8.40s
76 GPT 4o (2024-11-20) 57.43% $2.5 / $10 5.98s
77 Gemini 1.5 Pro (002) 56.76% $1.25 / $5 4.21s
78 Claude Opus 4.1 (Thinking) 56.12% $15 / $75 23.52s
79 Gemini 2.5 Flash Lite (9/25) (Nonthinking) 55.80% $0.1 / $0.4 8.04s
80 GPT 4o Mini 54.49% $0.15 / $0.6 6.06s
81 GPT 5 Nano 53.62% $0.05 / $0.4 33.36s
82 GPT 4.1 Nano 52.82% $0.1 / $0.4 3.86s
83 Mistral Large 3 52.11% $0.5 / $1.5 9.29s
84 Magistral Medium 1.2 (09/2025) 51.87% $2 / $5 25.95s
85 Claude Sonnet 4 (Thinking) 49.88% $3 / $15 46.32s
86 Grok 4.3 48.25% $1.25 / $2.5 7m23s
87 Grok 4.20 (Reasoning) 45.35% $2 / $6 11.12s
88 Grok 4 44.48% $3 / $15 65.02s
89 Gemini 1.5 Flash (002) 42.77% $0.075 / $0.3 2.10s
90 Grok 4.1 Fast (Reasoning) 42.61% $0.2 / $0.5 47.45s
91 Grok 4 Fast (Reasoning) 42.09% $0.2 / $0.5 14.47s
92 Llama 3.2 Vision (90B) 38.79% $1.2 / $1.2 5.07s
93 Mistral Medium 3.1 (05/2025) 36.45% $0.4 / $2 7.14s
94 Grok 4.1 Fast Non-Reasoning 34.26% $0.2 / $0.5 8.89s
95 Mistral Medium 3.5 28.89% $1.5 / $7.5 68.43s
96 Grok 4 Fast (Non-Reasoning) 25.32% $0.2 / $0.5 4.51s
97 Llama 3.2 Vision (11B) 23.29% $0.18 / $0.18 2.45s
98 Grok 2 Vision 3.46% $2 / $10 N/A

Partners in Evaluation


Dataset and Context

The MortgageTax benchmark evaluates the ability of language models to extract information from mortgage tax certificates. Vontive provided both the mortgage documents and the labeled queries, which we used as a foundation for the dataset.

When prompting the models, we provide the documents as images, testing their multimodal capabilities. We test them on two tasks:

  • Semantic Extraction: We ask the models to extract the year, the parcel number, and the county from the tax certificate.
  • Numerical Extraction: We ask the models to calculate the annualized amount due based on the tax certificate.

For both tasks, the models are asked to reply in a JSON format containing both an explanation and the final answer for each question. Not all models follow this format precisely, so some regex pattern matching is used to extract the final answers.

The dataset consists of 1258 documents, divided into three sets:

  • Public Validation (20 samples): Publicly accessible, available on request.
  • Private Validation (300 samples): Available for purchase to evaluate your own models/agents on.
  • Test (938 samples): A hold-out set that we never share externally. Only this set is used for the numbers reported on this page.

To receive access to the Public or Private Validation sets, please reach out to us at contact@vals.ai.


MortgageTax Input Example

Below is a typical example of the images passed to the models. For confidentiality reasons, we redacted the names and addresses of the owners and properties.

Page 1 of Mortgage Tax Page 2 of Mortgage Tax Page 3 of Mortgage Tax

Here are examples of the questions asked of the models.

Numerical Extraction:

I will give you a question about a document, that is presented as several images.
You must output your answer in a structured way, strictly writing in the json format below (do not add text before or after writing the json). The answer field must only contain the exact string or number, no explanations.

{
    "annualized_amount_due": {
        "reasoning": "Reasoning for annualized_amount_due",
        "answer": "Answer to annualized_amount_due"
    }
}

--START OF annualized_amount_due QUESTION--
What is the total annualized amount of tax due? First look at the payments made and amount due/paid for the prior year. It is possible this is split between the city and county. If there were multiple payments made in the prior year, then the same amount of payments should be expected for the current year. Then find the total amount due for the current year. This number should be within 25% of the prior years total amount due/paid. If the amount due is not within 25% of the prior years total amount due/paid, then we can assume that only part of the total annual amount due has been paid so far. In this case, you should extrapolate the total amount due for the current year based on the number of payments required and the amount paid in each payment. This number should also be within 25% of the total amount due for the prior year. If this is still not within 25% of the total amount due for the prior year, then return null.
--END OF annualized_amount_due QUESTION--

Semantic Extraction:

I will give you 3 questions about a document, that is presented as several images.
You must output your answers in a structured way, strictly writing in the json format below (do not add text before or after writing the json). The answer field must only contain the exact string or number, no explanations.

{
    "tax_year": {
        "reasoning": "Reasoning for tax_year",
        "answer": "Answer to tax_year question"
    },
    "county": {
        "reasoning": "Reasoning for county",
        "answer": "Answer to county question"
    },
    "parcel_number": {
        "reasoning": "Reasoning for parcel_number",
        "answer": "Answer to parcel_number question"
    }
}

--START OF tax_year QUESTION--
What is the most recent year of taxes being paid? The year cannot be in the future, so the maximum value should be the current year. If the tax year spans 2 years, return the earlier year. For example, if the tax year is 2023-2024, or 2023-24 return 2023.
--END OF tax_year QUESTION--

--START OF county QUESTION--
What is the name of the county the property is in? Exclude the word 'County' in the answer. This must be a real county name in the United States. If you found a city, return the county the city is located in.
--END OF county QUESTION--

--START OF parcel_number QUESTION--
What is the parcel or map number or APN or tax ID of the property? This is a unique identifier for the property, but is not the address of the property.
--END OF parcel_number QUESTION--