# Introducing central-sync

**URL:** <https://forum.getodk.org/t/introducing-central-sync/58313>\
**Category:** Showcase\
**Tags:** odk-central\
**Created:** [June 29, 2026, 8:14pm UTC](https://forum.getodk.org/t/introducing-central-sync/58313 "2026-06-29T20:14:02Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![tgachet](https://getodk.b-cdn.net/user_avatar/forum.getodk.org/tgachet/32/25181_2.png) [@tgachet](https://forum.getodk.org/u/tgachet)\
**Post date:** [June 29, 2026, 8:14pm UTC](https://forum.getodk.org/t/introducing-central-sync/58313/1 "2026-06-29T20:14:03Z")

</div>

Hi everyone,

I’d like to share a small project I’ve been working on : **central-sync**.

It is a Go tool that synchronizes **ODK Central** data into **PostgreSQL t** hrough the ODK Central API and its OData endpoints.

The goal is to provide a raw and reliable sync layer between Central and a PostgreSQL database, while keeping technical metadata for downstream SQL transformations.

GitHub repository : [https://github.com/tomgachet/central-sync](https://github.com/tomgachet/central-sync)

This is a **first public release candidate**.  
The core engine is already working well in my tests and real usage, but there are still a few things I’d like to improve over time.

If this sounds useful for your workflows, I’d be very happy to get feedback :

- feature ideas
- edge cases
- production concerns
- general design comments

Thanks!

---

<div class="post-metadata">

**Author:** ![didotb](https://getodk.b-cdn.net/letter_avatar_proxy/v4/letter/d/8e7dd6/32.png) [@didotb](https://forum.getodk.org/u/didotb)\
**Post date:** [July 21, 2026, 4:41am UTC](https://forum.getodk.org/t/introducing-central-sync/58313/2 "2026-07-21T04:41:00Z")

</div>

I'm confused what you meant by `synchronizes ODK Central data into PostgreSQL`. Doesn't ODK Central already use PostgreSQL as their default database backend? Or do you mean to say you can sync it to multiple different PostgreSQL databases for use with, let's say your clients, or to a public reference dataset?

---

<div class="post-metadata">

**Author:** ![tgachet](https://getodk.b-cdn.net/user_avatar/forum.getodk.org/tgachet/32/25181_2.png) [@tgachet](https://forum.getodk.org/u/tgachet)\
**Post date:** [July 22, 2026, 9:17pm UTC](https://forum.getodk.org/t/introducing-central-sync/58313/3 "2026-07-22T21:17:35Z")

</div>

Hello,

ODK Central uses its own PostgreSQL database to store data and display it in the frontend. This database is not accessible from the outside (it runs inside a Docker container), which is preferable for the overall proper functioning of ODK Central.  
The goal of central-sync is to retrieve the raw data stored in Central (submission data and entity lists) and transfer it to your own database server, enabling integration into your information system.  
Note that the Central database itself is never directly accessed; the synchronization process relies solely on its API endpoints.

---

<div class="post-metadata">

**Author:** ![dawansv](https://getodk.b-cdn.net/user_avatar/forum.getodk.org/dawansv/32/32256_2.png) [@dawansv](https://forum.getodk.org/u/dawansv)\
**Post date:** [July 27, 2026, 11:21pm UTC](https://forum.getodk.org/t/introducing-central-sync/58313/4 "2026-07-27T23:21:45Z")

</div>

Thank you @tgachet

This works very well with my ODK central server and quite useful. I had a hastily put together python script to pull data from ODK in mysql but this seems much more thorough and resilient.

I don't really mind using Postgres instead of mysql but it would be interesting to see how much work it would be to adapt it to work with mysql as well.

---

<div class="post-metadata">

**Author:** ![tgachet](https://getodk.b-cdn.net/user_avatar/forum.getodk.org/tgachet/32/25181_2.png) [@tgachet](https://forum.getodk.org/u/tgachet)\
**Post date:** [July 29, 2026, 12:05pm UTC](https://forum.getodk.org/t/introducing-central-sync/58313/5 "2026-07-29T12:05:53Z")

</div>

Hello @dawansv ,  
Thanks a lot for your feedback! I don't know MySQL well enough to comment on the workload aspect, but the idea of ​​evolving central-sync to support multiple database management systems is certainly an interesting avenue!  
I had also considered the possibility of storing data in a DuckDB database.

---

<div class="post-metadata">

**Author:** ![didotb](https://getodk.b-cdn.net/letter_avatar_proxy/v4/letter/d/8e7dd6/32.png) [@didotb](https://forum.getodk.org/u/didotb)\
**Post date:** [July 30, 2026, 6:33pm UTC](https://forum.getodk.org/t/introducing-central-sync/58313/6 "2026-07-30T18:33:53Z")

</div>

That makes a lot more sense now, thanks for clarifying.  
I've a handful of experience on other databases, I'll try to see if I can submit a PR to support other databases as well.  
Here's to hoping my new projects won't be as time demanding so I can help work on your project.
