Engineering teams live in GitLab. GitLab handles everything from source code management to CI/CD pipelines and security scanning.
Product and Operation teams live in Baserow.
Integrating Baserow with GitLab is a favorite among engineering teams because both are open-source and API-first. When these tools are disconnected, stakeholders pester engineers for status updates, and engineers waste time manually updating tracking tickets.
Using both gives velocity and visibility:
This integration is typically used to automate issue tracking, manage CI/CD data, or provide a user-friendly interface for technical repository data.
This is the most common method for syncing data between the two platforms.
Best for lightweight, one-way notifications without an intermediary tool.
| Area | In GitLab | In Baserow |
|---|---|---|
| Release Management | Pipelines deploy code to Staging/Production environments based on tags (e.g., v2.4.0). |
Release Managers plan the content of v2.4.0, track “Go/No-Go” approvals from Legal/Marketing, and generate the changelog. |
| Incident Response | Developers work on “Incidents” to fix production outages. | The SRE team maintains an “Incident Ledger” in Baserow, tracking Mean Time to Resolution (MTTR), impact analysis, and generating post-mortem PDF reports. |
| Feature Flags | Engineers implement feature flags in code to toggle functionality. | Product teams control the rollout percentage in Baserow. A webhook syncs the Baserow “Rollout %” field directly to the application config. |
| Compliance & Audit | GitLab stores the commit history and pipeline logs. | Baserow stores the “Change Request” forms required by auditors, linking specific GitLab commits to business approvals for SOX/ISO compliance. |
The most robust way to connect these tools is by linking a Baserow Row ID to a GitLab Pipeline.
Row ID to GitLab.This guide defines the Infrastructure Bridge between the two. Instead of replacing your current workflow, we will add a “Listener” to your GitLab pipelines and a “Dispatcher” to your Baserow tables.
Write permissions.Both tools need permission to talk to each other.
BASEROW_TOKEN.We will add a “Trigger Job” to your existing .gitlab-ci.yml file. This job only runs when Baserow asks it to. It acts as a wrapper around your existing scripts.
Add this block to your .gitlab-ci.yml:
`baserow_trigger_job:
stage: deploy
image: badouralix/curl-jq
rules:
# Only run this job if triggered by the API (e.g., via Baserow Webhook)
- if: $CI_PIPELINE_SOURCE == "trigger"
script:
# 1. READ: Capture the Row ID sent by Baserow
- export ROW_ID=$(cat $TRIGGER_PAYLOAD | jq -r '.items[0].id')
# 2. WRITE: Tell Baserow "I started working"
# Replace [YOUR_TABLE_ID] with the ID from your URL
- |
curl -X PATCH \
-H "Authorization: Token ${BASEROW_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"Status": "In Progress", "GitLab Job ID": "'"$CI_PIPELINE_ID"'"}' \
"https://api.baserow.io/api/database/rows/table/[YOUR_TABLE_ID]/${ROW_ID}/?user_field_names=true"
# 3. EXECUTE: Run your existing deployment or test scripts here
- echo "Running existing workflows..."
- ./your_deploy_script.sh
# 4. FINISH: Tell Baserow "I am done"
- |
curl -X PATCH \
-H "Authorization: Token ${BASEROW_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"Status": "Done", "Deploy Link": "'"$CI_PIPELINE_URL"'"}' \
"https://api.baserow.io/api/database/rows/table/[YOUR_TABLE_ID]/${ROW_ID}/?user_field_names=true"`
Check your webhook’s ‘Last Trigger’ in Baserow to see the exact JSON structure.
$TRIGGER_PAYLOAD: When Baserow calls GitLab, it sends the row data. GitLab saves this in a temporary file. We use jq to extract the id of the row that triggered the event.curl -X PATCH: This is the universal way to update Baserow. We use the ROW_ID we captured to ensure we update the exact record that requested the build.Now that GitLab is listening, we need to set up Baserow to shout.
https://gitlab.com/api/...token=TOKEN).POST.This architecture works regardless of your specific columns. You just need to map the fields in the curl command to your actual column names.
| Your Use Case | Baserow Trigger | GitLab Action |
|---|---|---|
| Release Management | Row created in “Releases” table. | Run deploy_prod.sh and update Baserow status to “Live”. |
| Report Generation | Status changed to “Generate Report”. | Run a Python script to build a PDF and upload the link back to Baserow. |
| User Provisioning | “New Employee” row added. | Run a script to create accounts and paste the temp password back into Baserow. |
Can I update multiple columns at once?
Yes. In the curl data (-d), you can include as many field:value pairs as you like, such as {"Status": "Done", "deployed_at": "2024-01-01"}.
How do I handle errors?
Add an after_script to your GitLab job. This runs even if the main script fails, allowing you to send a {"Status": "Failed"} update back to Baserow so your team knows something went wrong.
after_script:
- |
if [ "$CI_JOB_STATUS" != "success" ]; then
curl -X PATCH -H "Authorization: Token ${BASEROW_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"Status": "Failed"}' \
"https://api.baserow.io/api/database/rows/table/[YOUR_TABLE_ID]/${ROW_ID}/?user_field_names=true"
fi
Stakeholders; Marketing, Sales, and Leadership; rarely have access to (or understanding of) the complex pipelines and merge requests inside GitLab. Baserow is the structured operational layer, handling release schedules, compliance auditing, and stakeholder reporting.
You have successfully demonstrated the Closed-Loop Automation pattern:
Still need help? If you’re looking for something else, please feel free to make recommendations or ask us questions; we’re ready to assist you.