{"id":29256264,"url":"https://github.com/psmarcin/open-ynab-sync","last_synced_at":"2025-07-04T03:06:50.464Z","repository":{"id":300809341,"uuid":"1006517140","full_name":"psmarcin/open-ynab-sync","owner":"psmarcin","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-23T17:40:09.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-23T18:40:23.517Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/psmarcin.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}},"created_at":"2025-06-22T12:58:22.000Z","updated_at":"2025-06-23T17:40:12.000Z","dependencies_parsed_at":"2025-06-23T18:50:54.816Z","dependency_job_id":null,"html_url":"https://github.com/psmarcin/open-ynab-sync","commit_stats":null,"previous_names":["psmarcin/open-ynab-sync"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/psmarcin/open-ynab-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psmarcin%2Fopen-ynab-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psmarcin%2Fopen-ynab-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psmarcin%2Fopen-ynab-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psmarcin%2Fopen-ynab-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/psmarcin","download_url":"https://codeload.github.com/psmarcin/open-ynab-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psmarcin%2Fopen-ynab-sync/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263437345,"owners_count":23466368,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2025-07-04T03:06:49.880Z","updated_at":"2025-07-04T03:06:50.454Z","avatar_url":"https://github.com/psmarcin.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Open YNAB Sync\n\nA Go application that synchronizes transactions between GoCardless and YNAB (You Need A Budget).\n\n## Features\n\n- Automatically fetches transactions from GoCardless\n- Synchronizes transactions to YNAB\n- Runs on a schedule (every minute by default)\n- Handles rate limiting and authentication\n\n## Prerequisites\n\n- Go 1.24.4 or later (for building from source)\n- Docker (optional, for containerized deployment)\n- GoCardless account with API access\n- YNAB account with personal access token\n\n## Installation\n\n### Using Docker\n\n1. Pull the Docker image or build it yourself:\n\n```bash\n# Build the Docker image\ndocker build -t open-ynab-sync .\n```\n\n2. Run the container with the required environment variables:\n\n```bash\ndocker run -d \\\n  -e GC_SECRET_ID=your_gocardless_secret_id \\\n  -e GC_SECRET_KEY=your_gocardless_secret_key \\\n  -e GC_ACCOUNT_ID=your_gocardless_account_id \\\n  -e YNAB_ACCOUNT_ID=your_ynab_account_id \\\n  -e YNAB_TOKEN=your_ynab_token \\\n  --name open-ynab-sync \\\n  open-ynab-sync\n```\n\n### Using Docker Compose (Recommended)\n\n1. Copy the example environment file and edit it with your credentials:\n\n```bash\ncp .env.example .env\n# Edit .env with your actual credentials\n```\n\n2. Start the application using Docker Compose:\n\n```bash\ndocker-compose up -d\n```\n\n3. View the logs:\n\n```bash\ndocker-compose logs -f\n```\n\n4. Stop the application:\n\n```bash\ndocker-compose down\n```\n\nThe Docker Compose setup includes:\n- Automatic container restart if it crashes\n- Log rotation to prevent disk space issues\n- Health checks to monitor the application status\n\n### Building from Source\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/psmarcin/open-ynab-sync.git\ncd open-ynab-sync\n```\n\n2. Build the application:\n\n```bash\ngo build -o open-ynab-sync\n```\n\n3. Run the application with the required environment variables:\n\n```bash\nGC_SECRET_ID=your_gocardless_secret_id \\\nGC_SECRET_KEY=your_gocardless_secret_key \\\nGC_ACCOUNT_ID=your_gocardless_account_id \\\nYNAB_ACCOUNT_ID=your_ynab_account_id \\\nYNAB_TOKEN=your_ynab_token \\\n./open-ynab-sync\n```\n\n## Configuration\n\nThe application requires the following environment variables:\n\n| Variable | Description |\n|----------|-------------|\n| `GC_SECRET_ID` | GoCardless API Secret ID |\n| `GC_SECRET_KEY` | GoCardless API Secret Key |\n| `GC_ACCOUNT_ID` | GoCardless Account ID |\n| `YNAB_ACCOUNT_ID` | YNAB Account ID |\n| `YNAB_TOKEN` | YNAB Personal Access Token |\n\n### Getting GoCardless Credentials\n\n1. Sign up for a GoCardless developer account at [GoCardless Developer Portal](https://bankaccountdata.gocardless.com/)\n2. Create an application to get your Secret ID and Secret Key\n3. Find your Account ID in your GoCardless dashboard\n\n### Getting YNAB Credentials\n\n1. Log in to your YNAB account\n2. Go to Account Settings \u003e Developer Settings\n3. Generate a new Personal Access Token\n4. Find your Account ID in the URL when viewing your budget account\n\n## How It Works\n\n1. The application authenticates with GoCardless using your Secret ID and Secret Key\n2. It fetches transactions from the past 2 months from your GoCardless account\n3. It converts these transactions to YNAB format\n4. It uploads the transactions to your YNAB account\n5. This process repeats every minute\n\n## Development\n\n### Running Tests\n\n```bash\ngo test ./...\n```\n\n### Continuous Integration\n\nThis project uses GitHub Actions for continuous integration. The workflow automatically runs all tests on every push to the `main` branch and on pull requests to the `main` branch.\n\nYou can see the workflow configuration in `.github/workflows/go-tests.yml`.\n\n### Project Structure\n\n- `main.go` - Entry point and scheduler setup\n- `gocardless.go` - GoCardless API integration\n- `ynab.go` - YNAB API integration\n- `Dockerfile` - Container definition\n- `docker-compose.yml` - Docker Compose configuration for easy deployment\n- `.env.example` - Example environment variables file\n- `.github/workflows/` - GitHub Actions workflow configurations\n  - `go-tests.yml` - CI workflow for running tests\n\n## License\n\n[MIT License](LICENSE)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsmarcin%2Fopen-ynab-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpsmarcin%2Fopen-ynab-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsmarcin%2Fopen-ynab-sync/lists"}