GitHub Action

Stop merging bad data.

Add one step to your pipeline. VisiHub verifies every dataset snapshot, catches structural drift, and produces a signed proof — before it reaches production.

.github/workflows/verify.yml
- name: Verify financial export
  uses: VisiGrid/verify-action@v1
  with:
    api_key: ${{ secrets.VISIHUB_API_KEY }}
    repo: acme/payments
    file_path: ./exports/ap_payments.csv

30 seconds to set up. Runs on every push, every schedule, every PR.

What happens when the action runs

1

Upload

The file is published to VisiHub as a new dataset revision. Content hash computed and recorded.

2

Check

Snapshot integrity check runs automatically: row count, column names, schema structure, content hash. Compared against the previous revision.

3

Diff

A structural diff is computed: rows added or removed, columns added, removed, or type-changed. Available as a JSON output for downstream steps.

4

Verdict

If the check fails, the action fails your pipeline. A cryptographically signed proof is available for download — whether it passed or failed.

Built for these workflows

Nightly exports

Export from QuickBooks, Xero, or your ERP on a schedule. VisiHub verifies every export and alerts on drift.

dbt post-hooks

After dbt run completes, verify the output table. If dbt corrupts the data, the pipeline fails before the dashboard updates.

PR data review

When data files change in a pull request, post a diff summary as a comment. Reviewers see exactly what changed.

Monthly close

Publish the trial balance or AP aging at month-end. VisiHub locks the snapshot and produces a signed proof for audit.

Example: Nightly verification with Slack alerts

.github/workflows/nightly-verify.yml
name: Verify financial exports
on:
  schedule:
    - cron: '0 6 * * *'

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Export data
        run: ./scripts/export.sh

      - name: Verify snapshot
        id: verify
        uses: VisiGrid/verify-action@v1
        with:
          api_key: ${{ secrets.VISIHUB_API_KEY }}
          repo: acme/payments
          file_path: ./exports/ap_payments.csv

      - name: Alert on failure
        if: failure()
        run: |
          curl -X POST "$SLACK_WEBHOOK" \
            -d '{"text":"Integrity check failed for ap_payments.csv"}'

Action outputs

Every output is available to downstream steps. Post diffs to PRs, alert on Slack, or gate deployments.

Output Description
verification_status PASS or FAIL
diff_summary JSON with row/col changes, schema mutations
proof_url URL to download the signed verification proof
run_id VisiHub revision ID for linking
version Dataset version number

What it catches

Fails the pipeline
  • Row count changed unexpectedly
  • Columns renamed or removed
  • Schema structure drifted
Records for audit
  • Content hash of every upload
  • Who published and when
  • Full diff between versions
  • Signed cryptographic proof

Get started in 30 seconds

Create a VisiHub account, generate an API token, and add three lines to your workflow.