Wasting $38K on Manual Tasks? Automate with Odoo 18 Studio
By Braincuber Team
Published on December 22, 2025
Operations manager spends Monday morning manually updating 47 sales orders: Change stage to "Confirmed" → Assign salesperson → Create follow-up activity → Send email to customer. Takes 3.7 hours weekly. Forgets to update 8 orders (customer complains: "Nobody followed up"). Developer says: "I can code this automation." Estimate: 2 weeks, $14,200. Manager thinks: "Too expensive for simple workflow." Keeps doing manually. Lost: $8,947 annually + customer satisfaction.
Your manual workflow disaster: Repetitive tasks done manually (update stage → assign user → create activity = 47 times weekly). Team forgets steps (inconsistent process execution). No standardization (each person does it differently). Custom code too expensive ($14K per workflow). Developers backlogged (3-month wait for simple automation). Users create messy workarounds (Excel tracking, sticky notes, calendar reminders). Mistakes compound (8 forgotten follow-ups = angry customers).
Cost: Manual repetitive tasks = 3.7 hours weekly × 52 weeks × $67/hour = $12,892/year per person × 3 people = $38,676. Forgotten tasks = 8 weekly × 52 weeks × $147 avg lost deal = $61,152 revenue lost. Developer backlog for simple automations = 23 workflow requests × 2 weeks × $95/hour × 40 hours = $174,800 wasted (or never built). Inconsistent execution = compliance violations, audit findings, customer complaints. Data quality poor (filters show wrong records, manual cleanup 4.2 hours monthly).
Odoo 18 Studio Automation & Filter Rules fix this: No-code automation builder—click to create rules. Trigger: "When stage changes to Confirmed" → Actions: Assign salesperson, create activity, send email. Runs automatically 24/7. Filter rules: Save custom filters, apply by default (show only "My Open Orders" when user opens sales). No programming required. Build in 15 minutes vs 2 weeks coding. Cost: $0 (included in Studio). Here's how to automate workflows so you stop losing $38K annually to manual tasks.
You're Losing Money If:
What Studio Automation & Filter Rules Do
Automation: No-code workflow builder. Set trigger (when something happens) → Define actions (what to do automatically). Filter Rules: Save custom filters, apply by default to list views.
| Manual Process | Studio Automation |
|---|---|
| Manually update 47 orders weekly (3.7 hrs) | Auto-update when trigger fires (0 manual work) |
| Forget 8 tasks weekly (inconsistent) | Never forgets (100% consistent execution) |
| Developer: 2 weeks + $14K to code | Studio: 15 minutes, $0 cost |
| Apply same filter 40 times daily | Filter rule: Auto-applies (saved preference) |
| Each user setup differently (chaos) | Org-wide standard (consistent UX) |
💡 Automation Example:
Scenario: Sales order confirmed → Auto-assign salesperson + Create follow-up activity + Send email
- Trigger: "When Stage changes to Confirmed"
- Action 1: Update Record → Set Salesperson = Current User
- Action 2: Create Activity → "Follow up in 3 days"
- Action 3: Send Email → Template "Order Confirmation"
- Result: All 3 actions execute instantly when any order moves to Confirmed stage
Access Odoo 18 Studio
- Go to any Odoo module (Sales, CRM, Inventory, etc.)
- Click Toggle Studio icon (top-right corner, looks like pencil/wrench)
- Studio editing mode activates (screen background changes slightly)
- Access automation: Click Automation tab (top menu)
- Access filter rules: Click Filter Rules tab (top menu)
⚠️ Studio Module Requirement:
Studio is included in Odoo Enterprise (not Community). If you don't see "Toggle Studio" icon, you're on Community edition or Studio not enabled. Contact Odoo partner to activate.
Create Automated Action
Step 1: Create Pipeline Stages (If Needed)
If automating stage-based workflow, first create stages.
- In Studio mode, open form view
- Click "Add a pipeline status bar" button (top of form)
- Field Properties popup appears
- Add stages:
- Type stage names: "New", "Confirmed", "Ordered", "Cancelled"
- Click "Add new value" for each stage
- Click pencil icon to edit existing stage
- Click CONFIRM
- Pipeline status bar appears on form
Step 2: Open Automation Builder
- Click on stage field (or any field you want to automate)
- Left sidebar opens with field properties
- Click Automation tab
- Automated Actions dashboard opens (initially empty)
- Click NEW to create automation rule
Step 3: Configure Automation Rule
Basic Details
Trigger Configuration
Choose when automation fires. Multiple trigger types available:
Trigger Types:
Values Updated
- On Creation: Fires when new record created
- On Update: Fires when specific field changes
- On Creation & Update: Fires on both events
- On Deletion: Before record deleted
- On Archive/Unarchive: When record archived or restored
Email Events
- On Incoming Message: When email received in chatter
- On Outgoing Message: When email sent from record
Timing Conditions
- Based on Date Field: X days before/after date (e.g., "3 days before deadline")
- After Creation: X days after record created
- After Last Update: X days after last modification
Custom Triggers
- On Save: Every time record saved
- On UI Change: Field changed in interface (no save required)
External
- On Webhook: External system triggers automation
Trigger Fields (Optional)
If trigger is "On Update", specify which fields to monitor:
- Click Trigger Fields field
- Select fields from dropdown (e.g., "Stage", "Salesperson", "Total Amount")
- Multiple fields can be selected
- Automation fires only when these specific fields change
Apply On (Filter Domain)
Narrow automation to specific records matching conditions:
# Only confirmed orders
[('state', '=', 'sale')]
# Orders over $10,000
[('amount_total', '>', 10000)]
# Specific customer
[('partner_id.name', '=', 'Acme Corp')]
# Multiple conditions (AND)
[('state', '=', 'sale'), ('amount_total', '>', 5000)]
# OR conditions
['|', ('state', '=', 'sale'), ('state', '=', 'done')]
Step 4: Define Actions
Choose what happens when trigger fires. Can add multiple actions.
Available Actions:
📝 Update Record
Modify field values on current record (e.g., set Salesperson, change Priority)
✅ Create Activity
Schedule task/meeting/call for user (e.g., "Follow up in 3 days")
📧 Send Email
Auto-send email using template (e.g., order confirmation to customer)
📱 Send SMS
Send text message notification (requires SMS provider)
👥 Add Followers
Subscribe users to record (get chatter notifications)
➖ Remove Followers
Unsubscribe users from record updates
➕ Create Record
Generate new record in related model (e.g., create invoice from sale order)
💻 Execute Code
Run custom Python code (advanced users)
🌐 Send Webhook
Notify external system via HTTP request
Example: Update Record Action
- In Actions To Do, select Update Record
- Click Add a line
- Select field to update (e.g., "Salesperson")
- Choose evaluation type:
- Value: Static value (select user from dropdown)
- Python Expression: Dynamic (e.g.,
user= current user)
- Enter value
- Repeat for additional fields
Step 5: Save and Test
- Click Save icon (top-left)
- Exit Studio mode (click Toggle Studio again)
- Test automation:
- Create/update record to trigger automation
- Verify actions executed (field updated, email sent, activity created)
- Debug if needed:
- Settings → Technical → Automated Actions (view execution log)
- Check domain filter syntax
- Verify trigger field configuration
Create Filter Rules
Step 1: Access Filter Rules
- Enable Studio mode (Toggle Studio icon)
- Click Filter Rules tab (top menu)
- Dashboard shows existing filters (or empty if none)
- Click NEW
Step 2: Configure Filter
Filter Name:
User-facing name (e.g., "My Open Orders", "Inactive Contacts")
Model:
Auto-detected based on current module
User:
Leave blank for all users, or select specific user
Default Filter:
☑ Enable: Filter applies automatically when menu opened
☐ Disable: Filter appears in filter dropdown, not auto-applied
Action (Menu):
Select which menu this filter applies to (e.g., Sales → Orders)
Active:
Toggle ON to enable filter
Step 3: Define Domain (Filter Criteria)
Domain = Odoo's filter syntax using Python list format.
# My records only
[('user_id', '=', uid)]
# Inactive contacts
[('active', '=', False)]
# Orders from last 30 days
[('create_date', '>=', (context_today() - relativedelta(days=30)).strftime('%Y-%m-%d'))]
# High-value customers
[('customer_rank', '>', 0), ('total_invoiced', '>', 50000)]
# Specific stage
[('stage_id.name', '=', 'Confirmed')]
# Not cancelled or done
[('state', 'not in', ['cancel', 'done'])]
# Complex: My team's open leads
[('user_id.id', 'in', [uid, team_members]), ('type', '=', 'lead'), ('active', '=', True)]
Step 4: Set Context & Sort (Optional)
Context:
Pass additional parameters when filter applied (advanced)
{'group_by': 'stage_id'} # Group by stage
Sort:
Default sort order for filtered records
create_date desc # Newest first
name asc # Alphabetical
Step 5: Save and Test
- Click Save
- Exit Studio mode
- Navigate to menu where filter applies (e.g., Sales → Orders)
- If Default Filter enabled: Records auto-filtered
- If not default: Filter appears in Filters dropdown
Real-World Examples
Example 1: Sales Order Auto-Assignment
Scenario:
When sales order confirmed → Auto-assign to salesperson who created it + Create follow-up activity + Send confirmation email
Automation Configuration:
- Trigger: On Update
- Trigger Fields: State
- Apply On:
[('state', '=', 'sale')] - Action 1 - Update Record:
- Field: user_id
- Value:
record.create_uid(user who created order)
- Action 2 - Create Activity:
- Activity Type: Call
- Summary: "Follow up on confirmed order"
- Due Date: 3 days from now
- Assigned to:
record.user_id
- Action 3 - Send Email:
- Template: "Sale Order Confirmation"
- To:
record.partner_id.email
Result:
- Before: 47 orders weekly × 5 min manual = 3.9 hours
- After: Zero manual work (100% automated)
- Forgotten tasks: 8 weekly → 0
- Time saved: 3.9 hrs × 52 weeks × $67/hr = $13,572/year
Example 2: Lead Inactivity Alert
Scenario:
If lead not contacted in 7 days → Create urgent activity for sales manager
Automation Configuration:
- Trigger: Based on Date Field
- Trigger Date Field: Last Activity Date
- Delay: 7 days after
- Apply On:
[('type', '=', 'lead'), ('stage_id.is_won', '=', False)] - Action - Create Activity:
- Activity Type: To Do
- Summary: "URGENT: Lead inactive for 7 days"
- Priority: High
- Assigned to: Sales Manager
Result:
- Before: 23 leads lost per month (no follow-up) = $67K revenue
- After: 100% lead follow-up (automated alerts)
- Lead conversion: +18%
- Revenue recovered: $67K × 18% = $12,060/month = $144,720/year
Example 3: "My Team's Open Orders" Filter
Scenario:
Sales manager wants default view: Team members' open orders only (not cancelled/done)
Filter Configuration:
- Filter Name: "My Team - Open Orders"
- Model: Sale Order
- User: Sales Manager
- Default Filter: ☑ Enabled
- Action: Sales → Orders
- Domain:
[('user_id', 'in', [team_member_ids]), ('state', 'in', ['draft', 'sent', 'sale'])] - Sort:
date_order desc
Result:
- Before: Manager manually filters 40 times daily = 15 min wasted
- After: Opens menu → Sees exactly what's needed (0 setup)
- Time saved: 15 min × 5 days × 52 weeks = 65 hours/year
Best Practices
- Start Simple
- First automation: Single action (update one field)
- Test thoroughly before adding complexity
- Once working, add more actions
- Use Descriptive Names
- Good: "Auto-assign Salesperson on Confirm"
- Bad: "Automation 1"
- Future you will thank you
- Test with Sample Data First
- Create test records in development/staging
- Verify automation fires correctly
- Check edge cases (what if field empty?)
- Document in Notes Field
- Automation has Notes tab
- Explain why rule exists, who requested it
- Document any gotchas or dependencies
- Monitor Execution Logs
- Settings → Technical → Automated Actions
- Click automation → View execution history
- Identify failures, debug issues
Pro Tip: Automation runs as "system" not current user. When updating records, use user variable for current user or record.create_uid for record creator. Common mistake: Setting assigned_to = user ID directly (fails). Correct: Use Python expression user or reference field like record.user_id.
Wasting $38K Annually on Manual Repetitive Tasks?
We configure Odoo 18 Studio automations & filter rules: No-code workflow builder, trigger-action logic, custom filters, domain configuration. Reduce manual work from 3.7 hours to 0.
