Financial Audit Trail

Automate financial regulatory screenshot archiving for SEC 17a-4, FINRA, SOX, and MiFID II. Certified captures with SHA-256 hashes and timestamps.

Vitalii Holben Updated

Financial and legal firms are among the most common users of screenshot APIs. Not for thumbnails or social previews, but for documentation. When your business depends on proving what a web page showed on a specific date, a manual screenshot from someone's laptop isn't good enough. It has no timestamp you can trust, no way to verify it wasn't edited, and no metadata linking it to the original URL. A financial compliance screenshot API with the certified=true parameter solves all three problems in one request.

What financial firms typically document

The list is longer than you'd think. Fee disclosures and commission schedules that change with business decisions. Performance claims and investment terms on public-facing pages. Risk warnings in client portals. Marketing landing pages with rate offers and APR disclosures. Social media posts that count as advertising under FINRA rules. Terms of service before and after updates.

Any page that a regulator, auditor, or opposing counsel might ask about later is a candidate for automated capture. The common thread: these pages change, and the old versions disappear the moment someone hits deploy. Without a dated archive, you're reconstructing from memory, cached versions, and Wayback Machine snapshots. I've watched compliance teams spend whole afternoons doing exactly that.

Why this matters: regulations require it

SEC Rule 17a-4 requires broker-dealers to keep records of public-facing communications for up to 6 years. FINRA Rule 4511 says the same for member firms. In Europe, MiFID II wants 5 to 7 years of tamper-proof records. SOX makes destroying relevant evidence a criminal offense. These aren't edge cases. They're baseline requirements for any regulated financial firm.

The specifics vary by jurisdiction, but the core question is always the same: can you show what your website displayed on a given date, and can you prove the record is genuine? That's where the API comes in.

How a certified screenshot becomes audit evidence

A regular screenshot is just a file. Anyone can edit it, change the date, crop out a disclaimer. It proves nothing on its own.

A certified screenshot is different. The certified=true parameter adds verification metadata to every capture: a SHA-256 hash that's unique to the exact image (change one pixel and it won't match), an ISO 8601 timestamp of when the capture happened, and a fingerprint of every parameter used in the request. That combination turns an ordinary PNG into a verifiable record.

With certification enabled, the response includes verification data alongside the image:

curl "https://api.screenshotrun.com/v1/screenshots/capture?\
url=https://yourfirm.com/fees-and-commissions\
&certified=true\
&full_page=true\
&format=png\
&response_type=json" \
  -H "Authorization: Bearer YOUR_API_KEY"

The JSON response includes everything an auditor needs:

{
  "data": {
    "screenshot_url": "https://storage.screenshotrun.com/captures/...",
    "width": 1280,
    "file_size": 487320
  },
  "certification": {
    "sha256": "d8f2b47c1e9a3056...",
    "captured_at": "2026-10-18T02:15:22+00:00",
    "options_hash": "2a6f94e3b8c71d...",
    "url": "https://yourfirm.com/fees-and-commissions"
  }
}

Save the image file and the certification JSON together. Months later, run sha256sum on the image. If the hash matches what's in the JSON, the file is untouched. That's the chain of custody.

Automate financial compliance screenshots on a nightly schedule

One request is a proof of concept. The real value is in scheduling full-page certified captures across all your regulated pages:

import requests
from datetime import datetime

API_KEY = "YOUR_API_KEY"
pages = [
    "/pricing",
    "/fees-and-commissions",
    "/performance-disclosures",
    "/risk-warnings",
    "/terms-of-service",
]

for page in pages:
    resp = requests.get(
        "https://api.screenshotrun.com/v1/screenshots/capture",
        params={
            "url": f"https://yourfirm.com{page}",
            "full_page": "true",
            "certified": "true",
            "format": "png",
            "width": 1280,
            "response_type": "json",
        },
        headers={"Authorization": f"Bearer {API_KEY}"},
    )
    data = resp.json()
    cert = data["data"].get("certification", {})
    ts = datetime.now().strftime("%Y-%m-%d")
    print(f"{ts} | {page} | SHA-256: {cert.get('sha256', 'N/A')[:24]}...")

Run this via cron, GitHub Actions on a schedule, or whatever job runner you have. The Python integration guide covers error handling and async patterns. Each capture costs one API credit. Five pages nightly, seven days a week — that's 35 credits, well within the free tier.

If your firm operates across jurisdictions, add geolocation parameters to capture locale-specific versions. A German client sees EUR pricing and BaFin risk warnings. A US client sees USD and SEC disclosures. Each version gets its own certified capture.

Capturing is not storing

This is worth saying clearly: a screenshot API captures images. It doesn't manage your archive, enforce retention policies, or handle eDiscovery exports. Capture is one piece of a larger system.

You need a storage layer: S3 with Object Lock, GCS Bucket Lock, or Azure immutable blobs for the tamper-proof requirement. You need a folder structure that lets you find a specific page from a specific date quickly. And you need retention tags so files don't get deleted before the regulatory window closes (6 years for FINRA, 7 for MiFID II).

A structure that works:

audit-trail/
  2026/
    10/
      18/
        fees-and-commissions/
          screenshot.png
          certification.json
        risk-warnings/
          screenshot.png
          certification.json

Use webhooks to automate delivery: the API calls your endpoint when the capture finishes, your handler saves both files to the right path. The API is always part of a system in this use case, not the whole system.

Enterprise archiving tools like PageFreezer and Smarsh bundle capture, storage, retention, and eDiscovery into one platform for $50K–$200K per year. If you have developers and existing infrastructure, the API approach gets you the capture layer at a fraction of that cost. Honestly, for teams without dev capacity, the enterprise route might make more sense. Know your situation.

One parameter, real evidence value

The certified parameter is a single boolean. Adding certified=true to any capture request turns an ordinary screenshot into a verifiable, timestamped record with a cryptographic proof chain. That's the difference between "here's an image I saved" and "here's an image with a hash proving it hasn't been altered since capture."

It's not expensive. Certification works on every plan, including the free tier. Check pricing for the details. Plans start at $9/month for 2,000 captures.

We offer a generous free plan: 200 captures per month, certification included, no credit card required. Try the workflow with your most important pages. If it fits your compliance needs, we'd be glad to have you using the API long-term. For broader website compliance monitoring beyond the financial sector, the compliance monitoring use case covers that. For court-ready evidence and litigation holds, see the legal evidence use case.

FAQ#

No. Certification works on every plan, including the free tier. Adding certified=true to a request does not consume additional credits. You get the SHA-256 hash, timestamp, and parameter fingerprint at no extra cost.

It depends on the regulation. SEC Rule 17a-4 requires up to 6 years. FINRA Rule 4511 says 6 years. MiFID II requires 5 to 7 years. SOX covers 5 to 7 years. Set retention tags on your storage objects to match the applicable window.

For most SEC and FINRA recordkeeping requirements, a SHA-256 hash with a server-generated timestamp is accepted in practice. For EU firms under strict MiFID II interpretations, check whether you need an eIDAS-qualified timestamp from an external TSA. Our certification is not RFC 3161 compliant.

Yes. Pass authentication cookies via the cookies parameter so the API can access protected pages. For details on capturing behind login, see the screenshot behind login use case.

Enterprise tools bundle capture, storage, retention policies, and eDiscovery into one platform for 50K to 200K per year. The API gives you the capture layer only, starting at 9 dollars per month. You bring your own storage and retention management. Best for teams with developers and existing cloud infrastructure.

Written by

Vitalii Holben

Co-founder and CEO of ScreenshotRun. Full-stack developer building screenshot API tools that help developers capture, automate, and monitor web pages at scale. Based in Europe, shipping code since 201...

Screenshot API in a few clicks

Free plan includes 200 screenshots every month. No credit card required.

Sign up → copy your key → make your first call