{"id":14968772,"url":"https://github.com/supabase/orb-sync-engine","last_synced_at":"2026-04-13T05:05:21.765Z","repository":{"id":232764037,"uuid":"783600317","full_name":"supabase/orb-sync-engine","owner":"supabase","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-27T14:43:26.000Z","size":914,"stargazers_count":29,"open_issues_count":1,"forks_count":6,"subscribers_count":17,"default_branch":"main","last_synced_at":"2026-03-28T00:33:28.270Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/supabase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["supabase"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2024-04-08T08:00:17.000Z","updated_at":"2026-03-27T14:42:47.000Z","dependencies_parsed_at":"2025-11-17T10:01:36.858Z","dependency_job_id":null,"html_url":"https://github.com/supabase/orb-sync-engine","commit_stats":{"total_commits":29,"total_committers":2,"mean_commits":14.5,"dds":"0.27586206896551724","last_synced_commit":"cd2b861e9fbe1237d33c0ac54ee9f4f8eef63be9"},"previous_names":["supabase/orb-sync-engine"],"tags_count":121,"template":false,"template_full_name":null,"purl":"pkg:github/supabase/orb-sync-engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supabase%2Forb-sync-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supabase%2Forb-sync-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supabase%2Forb-sync-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supabase%2Forb-sync-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/supabase","download_url":"https://codeload.github.com/supabase/orb-sync-engine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/supabase%2Forb-sync-engine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31307412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-24T13:40:32.056Z","updated_at":"2026-04-02T13:57:40.249Z","avatar_url":"https://github.com/supabase.png","language":"TypeScript","funding_links":["https://github.com/sponsors/supabase"],"categories":[],"sub_categories":[],"readme":"# Orb Sync Engine\n\nContinuously synchronizes an [Orb](https://www.withorb.com/) account to a Postgres database.\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/supabase/orb-sync-engine/blob/main/docs/orb-sync-engine-overview--light.svg?raw=true#gh-light-mode-only\"\u003e\n\u003cimg src=\"https://github.com/supabase/orb-sync-engine/blob/main/docs/orb-sync-engine-overview.svg?raw=true#gh-dark-mode-only\"\u003e\n\u003c/p\u003e\n\n## Motivation\n\nSometimes you want to analyze your billing data using SQL. Even more importantly, you want to join your billing data to your product/business data.\n\nThis server synchronizes your [Orb](https://www.withorb.com/) account to a Postgres database. It can be a new database, or an existing Postgres database.\n\n## How it works\n\n- Creates a new schema `orb` in a Postgres database, with tables \u0026 columns matching Orb.\n- Exposes a `/webhooks` endpoint that listens to any Orb webhooks.\n- Inserts/updates/deletes changes into the tables whenever there is a change to Orb.\n\n**Not implemented**\n\n- This will not do an initial load of existing Orb data. You should use CSV loads for this. We might implement this in the future.\n- Backfill of data\n- Entities that are not supported through webhooks like plans and billable metrics\n- `orb-sync-lib` is not yet published as standalone npm package (could be used in serverless functions or anywhere else)\n- Database migration not handled automatically, need to run migrations from `db/migrations` manually for now\n\n## Supported Webhooks\n\n- [x] billable_metric.edited\n- [x] customer.balance_transaction_created\n- [x] customer.created\n- [x] customer.credit_balance_depleted\n- [x] customer.credit_balance_dropped\n- [x] customer.edited\n- [x] data_exports.transfer_success (ignored) \n- [x] data_exports.transfer_error (ignored) \n- [x] subscription.created\n- [x] subscription.started\n- [x] subscription.fixed_fee_quantity_updated\n- [x] subscription.edited\n- [x] subscription.ended\n- [x] subscription.plan_changed\n- [x] subscription.usage_exceeded\n- [x] subscription.cost_exceeded\n- [x] subscription.plan_version_change_scheduled\n- [x] subscription.plan_version_changed\n- [x] invoice.issue_failed\n- [x] invoice.issued\n- [x] invoice.payment_failed\n- [x] invoice.payment_processing\n- [x] invoice.payment_succeeded\n- [x] invoice.edited\n- [x] invoice.manually_marked_as_void\n- [x] invoice.manually_marked_as_paid\n- [x] invoice.undo_mark_as_paid\n- [x] invoice.sync_succeded\n- [x] invoice.sync_failed\n- [x] credit_note.issued\n- [x] credit_note.marked_as_void\n- [x] resource_event.test\n\n## Development\n\n**Develop**\n\n- Start a Postgres instance using `cd docker \u0026\u0026 docker-compose up`\n- `mv .env.sample .env` and adjust values as necessary\n- `npm run dev:node-fastify` to start the local server\n- `npm run test` to run tests across the repo\n\n**Building Docker**\n\n```bash\ncd apps/node-fastify\ndocker build -t orb-sync-engine .\n# Ensure env vars are set\ndocker run -p 8080:8080 orb-sync-engine\n```\n\n## Inspiration\n\nInspired by [stripe-sync-engine](https://github.com/supabase/stripe-sync-engine)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupabase%2Forb-sync-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsupabase%2Forb-sync-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupabase%2Forb-sync-engine/lists"}