Extract, Validate, Automate
The OCR API That Costs
40% Less
Connect once. Extract thousand docs in second. Built for developers, priced for scale,
backed by a team that sets you up personally.
99%
Accuracy
3s
Average extraction time
80%
Cost reduction
Trusted by smart business
The easiest AI-powered OCR API to use
Valitract’s OCR API speaks your team’s language. Choose from four ready-to-use code
samples and drop them straight into your project. No adapters, no wrappers
– just clean, working code.
import java.io.*;
import java.net.*;
import org.json.*;
public class ValitractOCR {
private static final String API_KEY = "your_api_key_here";
private static final String API_URL = "https://api.valitract.com/api/v1/extract-generic";
public static void main(String[] args) {
try {
File file = new File("document.pdf");
String result = processOCR(file);
System.out.println("Extracted Data: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String processOCR(File file) throws Exception {
HttpURLConnection conn = (HttpURLConnection) new URL(API_URL).openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Bearer " + API_KEY);
conn.setDoOutput(true);
// Upload file and get response
return "JSON Response";
}
}package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
)
const (
apiKey = "your_api_key_here"
apiURL = "https://api.valitract.com/api/v1/extract-generic"
)
type OCRResponse struct {
FileName string `json:"file_name"`
ExtractedData map[string]interface{} `json:"extracted_data"`
}
func processOCR(filePath string) (*OCRResponse, error) {
file, err := os.Open(filePath)
if err != nil {
return nil, err
}
defer file.Close()
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _ := writer.CreateFormFile("file", filePath)
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", apiURL, body)
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var result OCRResponse
json.NewDecoder(resp.Body).Decode(&result)
return &result, nil
}
func main() {
result, err := processOCR("document.pdf")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Extracted Data: %+v\n", result)
}const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const API_KEY = 'your_api_key_here';
const API_URL = 'https://api.valitract.com/api/v1/extract-generic';
async function processOCR(filePath) {
try {
const form = new FormData();
form.append('file', fs.createReadStream(filePath));
const response = await axios.post(API_URL, form, {
headers: {
'Authorization': `Bearer ${API_KEY}`,
...form.getHeaders()
}
});
console.log('Extracted Data:', response.data);
return response.data;
} catch (error) {
console.error('Error processing OCR:', error.message);
throw error;
}
}
// Usage
processOCR('document.pdf')
.then(data => console.log('Success:', data))
.catch(err => console.error('Failed:', err));<?php
define('API_KEY', 'your_api_key_here');
define('API_URL', 'https://api.valitract.com/api/v1/extract-generic');
function processOCR($filePath) {
if (!file_exists($filePath)) {
throw new Exception("File not found: $filePath");
}
$ch = curl_init();
$cfile = new CURLFile($filePath, mime_content_type($filePath), basename($filePath));
$data = [
'file' => $cfile
];
curl_setopt_array($ch, [
CURLOPT_URL => API_URL,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . API_KEY
]
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
return json_decode($response, true);
} else {
throw new Exception("API Error: $response");
}
}
// Usage
try {
$result = processOCR('document.pdf');
echo "Extracted Data:\n";
print_r($result);
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
}
?>import requests
import json
API_KEY = 'your_api_key_here'
API_URL = 'https://api.valitract.com/api/v1/extract-generic'
def process_ocr(file_path):
"""
Process OCR on a document using Valitract API
Args:
file_path (str): Path to the document file
Returns:
dict: Extracted data from the document
"""
headers = {
'Authorization': f'Bearer {API_KEY}'
}
with open(file_path, 'rb') as file:
files = {
'file': (file_path, file, 'application/pdf')
}
try:
response = requests.post(API_URL, headers=headers, files=files)
response.raise_for_status()
result = response.json()
return result
except requests.exceptions.RequestException as e:
print(f'Error processing OCR: {e}')
raise
# Usage
if __name__ == '__main__':
try:
data = process_ocr('document.pdf')
print('Extracted Data:')
print(json.dumps(data, indent=2))
except Exception as e:
print(f'Failed to process document: {e}')require 'net/http'
require 'uri'
require 'json'
API_KEY = 'your_api_key_here'
API_URL = 'https://api.valitract.com/api/v1/extract-generic'
def process_ocr(file_path)
uri = URI.parse(API_URL)
File.open(file_path, 'rb') do |file|
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{API_KEY}"
boundary = "-----------RubyMultipartBoundary"
request['Content-Type'] = "multipart/form-data; boundary=#{boundary}"
post_body = []
post_body << "--#{boundary}\r\n"
post_body << "Content-Disposition: form-data; name=\"file\"; filename=\"#{File.basename(file_path)}\"\r\n"
post_body << "Content-Type: application/pdf\r\n\r\n"
post_body << file.read
post_body << "\r\n--#{boundary}--\r\n"
request.body = post_body.join
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
if response.code == '200'
JSON.parse(response.body)
else
raise "API Error: #{response.body}"
end
end
end
# Usage
begin
result = process_ocr('document.pdf')
puts "Extracted Data:"
puts JSON.pretty_generate(result)
rescue StandardError => e
puts "Error: #{e.message}"
endusing System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace ValitractOCR
{
public class OCRClient
{
private const string API_KEY = "your_api_key_here";
private const string API_URL = "https://api.valitract.com/api/v1/extract-generic";
public static async Task<string> ProcessOCR(string filePath)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", API_KEY);
using (var form = new MultipartFormDataContent())
{
var fileContent = new ByteArrayContent(
File.ReadAllBytes(filePath)
);
fileContent.Headers.ContentType =
MediaTypeHeaderValue.Parse("application/pdf");
form.Add(fileContent, "file", Path.GetFileName(filePath));
var response = await client.PostAsync(API_URL, form);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
return result;
}
}
}
public static async Task Main(string[] args)
{
try
{
var result = await ProcessOCR("document.pdf");
Console.WriteLine("Extracted Data:");
var formatted = JsonConvert.DeserializeObject(result);
Console.WriteLine(
JsonConvert.SerializeObject(formatted, Formatting.Indented)
);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
}Beyond Invoices,
A Complete Document Suite
Receipt
ID Card
Accounts Payable
Bank Statements
Bill of Lading
Purchase Order
Resumes
Contracts
Pay Less. Get More. No Surprises.
Valitract is priced to grow with you – not to squeeze you. Our OCR API costs up to 40% less than comparable platforms, with no hidden fees for retries, failed calls, or support.
*Based on public pricing comparison with leading OCR API providers. Data updated Q2 2025.
- Up to 40% lower price-per-page than industry benchmarks
- Volume discounts start at 1,000 pages/month
- Pay only for successful extractions
- No lock-in – cancel or scale anytime
Dedicated support
We’re always here to help you
A real human from our team, available 1:1 to help you go from setup to production.
No chatbots, no ticket queues for onboarding.
Dedicated onboarding session with a Valitract engineer
Help with custom field configuration and model tuning
Chat or email support throughout your integration
Ongoing check-ins during your first month
“We went live in two days. The Valitract team supported us on every step. So helpful and very enthusiastic.”
Mr. Gian – COO of GDS

The best Document AI solution for automated data entry
Valitract changed what we can promise our clients. We now compete on speed and precision in a way we simply couldn’t before. It has become a core part of how we deliver quality at scale, and an important reason clients choose GDS over the competition.

Simple and flexible pricing plan
Valitract completely eliminated the headache of rigid software contracts. Their flexible data extraction plans allow HRI to scale up during peak hiring seasons and scale down seamlessly when things quiet down. Simple, transparent, and highly effective.

Smart aproach with security protocols in mind
You don’t have to sacrifice speed for security. Valitract secures data extraction pipeline handles our sensitive data flawlessly, maintaining strict compliance without adding latency to our workflows. It’s a rare tool that makes both data engineers and security auditors happy.
We prioritize data security
over everything else.
DocAI prioritizes the confidentiality and integrity of your data. As a testament to our commitment, we adhere to stringent compliance standards, including GDPR, and HIPAA.
GDPR
COMPLIANT
SOC 2 TYPE 2
IN PROGRESS
ISO 27001
IN PROGRESS
Ready to transform with Valitract OCR API
Try for free, integrate fast, with hands-on support from the Valitract team.
Frequently asked question
Find quick solutions to common queries and get the most out of your learning experience
Optical Character Recognition (OCR) data extraction software converts text from scanned documents, PDFs, and images into editable, machine-readable data, automating manual workflows.
AI-powered OCR data extraction software using machine learning models that understand context, document structure, and field relationships. Valitract can extract data from complex layouts and improve over time.
No, Valitract is designed with a user-friendly interface for non-technical users, while also providing powerful APIs for developers.
Yes, thanks to advanced AI models, Valitract can accurately interpret and extract text from partially or fully handwritten documents.
Valitract achieves up to 99.8% accuracy across standard layouts, using automated validation checks to flag low-confidence data.
Absolutely. Valitract employs enterprise-grade encryption and data privacy protocols to ensure your confidential documents remain protected.
You can sign up for a free trial account, explore our documentation, and start processing your first documents in just a few minutes.
