Anoze Umar

Data & Automation Engineer

I build the systems organisations make decisions from.

I engineer scalable data infrastructure, pipelines, dashboards and automations that leadership teams run on and companies grow from. Five years across health distribution, IT services and international development.

Abuja, Nigeria · WAT (UTC+1) · Open to remote work and relocation

Anoze Umar

Selected works

6 projects
Automation2026

Oze

Personal AI Job Board

Oze probably found your job posting before you found me.

Oze is an AI job recommendation engine that searches five job markets worldwide and scores every opening against my CV.

Good roles were buried among thousands of unsuitable listings, and checking job sites by hand took hours I didn't have. So I built a self-running AI lead-generation pipeline: about 1,500 listings a week, narrowed to the 15 worth my time, waiting on my phone before I wake.

n8nJavaScriptAIDocker
Read the case study →
Business Intelligence · Microsoft2026

Sales Intelligence Pipeline

Automated ERP Reporting

An end-to-end pipeline that catches sales and stock reports straight from email, cleans them, and feeds a single live Power BI app built on Microsoft Fabric.

Reports arrived from several locations and two different ERP systems, each with its own layout: buried headers, merged cells, mismatched column names. Stitching them together by hand took hours every week and let errors reach the numbers leadership decided on. Now every file is captured, parsed and checked automatically, the app refreshes without anyone touching a spreadsheet, and leadership reviews numbers they can trust.

PythonPower AutomateFabricPower BI
Read the case study →
Business Intelligence · Google2025

Plantanova

Inventory Intelligence System

An inventory and analytics system built around Plantanova, a Spanish exporter of capers, olives and pickles, entirely on Google tools.

Perishable stock, cold rooms, and a different shelf life for every product: one missed expiry or empty shelf can cost an export order. I modelled the whole operation, tracing every batch from supplier to customer, shipping oldest-expiry-first, re-ordering before stock runs short and alerting the right manager before trouble lands. On two years of modelled trading it holds 97 to 100% order fill with cold rooms around 60% full.

Apps ScriptGoogle SheetsLooker Studio
Low-code · Microsoft2026

Integrated Management System

ISO Compliance on Microsoft 365

A Microsoft 365 system replacing manual quality, HSE and document control for an offshore EPCI contractor.

Risks, incidents, corrective actions and permits sat in separate registers across ten departments, so proving ISO and API compliance meant chasing emails and spreadsheets. I built the apps, workflows and reporting on top: every record numbered, scored and logged automatically, a high risk left open 14 days raises its own corrective action, and one Power BI suite, secured by role, shows leadership where the company stands.

Power AppsPower AutomatePower BISharePoint
Read the case study →
Business Intelligence · SQL2025

Aura Churn Intelligence

Salon Retention Analytics

A churn and retention analytics system for Aura Beauty Salon in New Zealand, from database to live Power BI app.

Salon clients rarely cancel; they just stop booking, and the owner finds out when revenue dips months later. I built the stack end to end off the Zenoti API: salon records funnelled into a cloud MySQL database, SQL views that classify every client as active, at risk or churned each month, and a Power BI app that shows who is slipping, which services keep clients, and who can still be won back.

MySQLSQLPower BIDAX
Automation · Google2025

YAAG

Year at a Glance

A Google Sheets to Google Calendar automation that lets one person run another's diary without ever entering their calendar.

An executive's calendar is private, but the assistant who runs it needs somewhere to plan, move and clear commitments. YAAG gives them a year-at-a-glance sheet: fill in a day and the event appears, change it and the event moves, clear it and the event is gone. The executive only ever opens the calendar.

Apps ScriptGoogle SheetsGoogle Calendar
Read the case study →

Skills

Programming
SQLPythonDAXJavaScriptPower Query MPowerShell
Data engineering
Data modellingETL pipelinesData validationMySQLMicrosoft FabricPostgreSQL
BI and visualisation
Power BIExcelLooker StudioData storytellingTableau
Automation
Workflow automationn8nAPI integrationApps ScriptPower AutomateSharePointPower Apps
AI and analytics
Embedded AIPrompt engineeringLLM scoringStatisticsMachine learning
Infrastructure
DockerLinux VPSGit and GitHubCloudflare
GIS
Spatial analysisFlood modelling
ExpertAdvancedProficientWorking knowledge

About

I build things that work, on screen and off it.

On screen, that means data systems people actually run on: pipelines that catch reports before anyone downloads them, dashboards that show leaders where the business stands and what needs attention next, and automations that take repetitive work off people's desks for good. Five years across health distribution, IT services and international development have taught me the same lesson each time: a number only matters if someone trusts it enough to act on it. That is why I automate first: hours and money leak fastest through manual work, and people forget, but systems remember.

Off screen, I'm a hands-on DIYer: electrics and electronics, plumbing, masonry, woodwork and carpentry, metalwork, arts and crafts. Mostly home improvement and interior decoration, and mostly because I love finding out how things work.

I hold an MSc in Geographic Information Systems and Udacity certifications as a Data Scientist and Data Analyst. I also teach, from industry leaders to young data enthusiasts, showing them what is possible with data.

Experience

  • Senior Data AnalystSociety for Family Health, Abuja2026 – Present
  • Data Analyst (contract)RedCup IT, California (remote)2025
  • Data AnalystBluehouse IT and Security, Abuja2023 – 2025
  • Data AnalystCatalyze Data, Toronto (remote)2022 – 2023
  • Data Analyst, Geospatial & MLGeohazards Risk Mapping Initiative2022
  • Program Associate, Research & DataI4DI, Washington D.C. (remote)2021
← All works

Case study · Business Intelligence · 2026

Sales Intelligence Pipeline

Automated ERP reporting. It catches sales and stock reports the moment they arrive by email, reconciles two very different systems into one clean model, and keeps a live Power BI app current without anyone touching a spreadsheet.

Solution architecture
Solution architecture Two ERP systems send reports by email. Power Automate captures and routes the attachments into a SharePoint landing zone. A Python ETL finds the real header, cleans, maps both systems to one schema and validates the data, sending malformed files to quarantine and writing a log and alerts on every run. Clean unified tables feed a Microsoft Fabric semantic model and a live Power BI app used by leadership. SOURCESCAPTURELANDTRANSFORMSERVE ERP system AClean exports ERP system BReport-style exports Email inboxReports as attachments Power AutomateCapture and route SharePointRaw landing zone Python ETL Find the real header Clean and unmerge Map to one schema Validate and derive QuarantineMalformed files Log + alertsEvery run audited Unified tablesOne clean schema Microsoft FabricSemantic model Power BI appLive, refreshes itself LeadershipNumbers they can trust

The main path in orange runs unattended. Anything that fails a check is set aside and reported, never silently dropped.

The problem

Reporting shouldn't start with a download.

Sales and stock reports arrived by email from several locations, exported from two ERP systems that agreed on almost nothing. One produced clean tables. The other produced report-style sheets, with metadata blocks on top, merged cells, headers that moved from file to file, and its own names for the same columns and products.

Every cycle meant downloading attachments, cleaning each format by hand and stitching the figures together in spreadsheets. It took hours, left no record of where a number came from, and let errors travel all the way into the report leadership used to decide.

How it works

Eight steps from inbox to insight.

  1. CapturePower Automate watches the inbox and saves every report attachment the moment it lands.
  2. RouteEach file is filed by its source, so nothing is lost and nothing is processed twice.
  3. Find the headerPython scans each sheet to find where the real table starts, wherever it sits.
  4. CleanMetadata is stripped, merged cells undone, and report context such as dates kept.
  5. StandardiseBoth systems are mapped into one schema for stock, invoices, payments and customer balances.
  6. ValidateMissing fields, impossible dates and duplicate transactions are flagged; useful fields are derived.
  7. Quarantine and logMalformed files are set aside, and every run leaves an audit trail.
  8. PublishClean tables feed a Fabric semantic model, and the Power BI app refreshes on its own.
What changed

From a weekly chore to a system nobody has to run.

Before
  • Attachments downloaded by hand
  • Each ERP format cleaned manually
  • Figures stitched together in spreadsheets
  • No record of where a number came from
  • Errors caught late, if at all
After
  • Reports captured the moment they arrive
  • Both formats parsed and reconciled automatically
  • One schema across every location
  • Every run logged, every figure traceable
  • Problems flagged before anyone opens the app
Built to be trusted

Speed was never the real goal. A faster report nobody trusts changes nothing, so every record carries the file it came from and the run that processed it, and anything that fails a check is quarantined and reported instead of quietly dropped.

Every number in the app can be traced back to the file it came from.

PythonpandasPower AutomateSharePointMicrosoft FabricPower BI
← All works

Case study · Business Intelligence · Google · 2025

Plantanova

Inventory intelligence for a Spanish food exporter. Google Sheets holds the data, Apps Script runs the logic, and Looker Studio shows the business where it stands, with no paid software anywhere in the stack.

Built aroundPlantanova, Spain
StackSheets · Apps Script · Looker Studio
DataReal catalogue, 24 months of modelled trading
RunsDaily and weekly, unattended
Solution architecture
Plantanova solution architecture Master data, transactions and stock rules live in Google Sheets. An Apps Script engine, run by scheduled triggers, calculates stock by batch and room, allocates shipments oldest-expiry-first, checks reorder points and expiry, and pre-aggregates KPIs. It writes an analytics layer that feeds a live Looker Studio dashboard, and an alert log that drives email alerts. Both reach the managers who act on them. DATASTOREENGINEOUTPUTSSERVEUSERS Master dataProducts, suppliers, rooms TransactionsReceipts, orders, shipments Stock rulesMinimum, reorder, maximum Google SheetsOne table per entity Apps Script engine Stock by batch and room Oldest expiry ships first Reorder and expiry checks KPIs pre-calculated TriggersDaily and weekly Analytics layerReady-to-read KPI tables Alert logEvery alert recorded Looker StudioLive dashboard Email alertsTo the right manager ManagersAct before it costs

Everything in orange runs on its own schedule. Nobody has to open the spreadsheet for the dashboard or the alerts to stay current.

The problem

Perishable stock punishes guesswork.

Plantanova makes and exports capers, olives and pickled vegetables. In the operation I modelled around it, stock sits in a main warehouse and two cold rooms, every product has its own shelf life and temperature range, and export buyers reject anything too close to its expiry date.

Run on spreadsheets and memory, an operation like this goes wrong in predictable ways. Old lots get forgotten until they expire, reorders happen when someone notices an empty shelf, and margin is only known once the month has closed. I set out to design the system that would stop each of those before it happens.

How it works

Eight rules the system never forgets.

  1. ReceiveEvery delivery becomes a batch with its supplier, cost, production date and expiry.
  2. StoreEach product goes to the room its temperature range needs, and space is tracked in cubic metres.
  3. ReorderWeekly checks compare stock plus open orders against a reorder point set by demand and supplier lead time.
  4. ShipOrders take the oldest expiry first, and nothing ships too close to its date for an export buyer.
  5. Write offExpired or damaged stock is recorded at what it cost, so losses show up in the numbers.
  6. CalculateStock, value, turnover, fill rate and margin are recalculated every morning.
  7. AlertLow stock goes to procurement, expiry risk goes to the warehouse, and every alert is logged first.
  8. ReportA Looker Studio dashboard reads the pre-calculated tables, so it opens fast and never drifts.
Live dashboard

See it running.

The dashboard is live and fully interactive. Open it full screen ↗

Built to be trusted

A dashboard is only as good as its arithmetic. Cost of sales comes from what each shipped batch actually cost, not from what was bought that month. Stock is valued at cost, space is measured in the same units as the rooms, and every alert is written to a log before any email goes out. When I audited the build, those were exactly the traps I found and closed.

Every kilo shipped traces back to its batch, its supplier and the room it left from.

Google SheetsApps ScriptJavaScriptLooker StudioGmail
← All works

Case study · Low-code · Microsoft · 2026

Integrated Management System

An ISO compliance system on Microsoft 365 for an offshore EPCI contractor. Power Apps captures the record, Power Automate runs the process, and Power BI shows leadership where the whole company stands.

Solution architecture
Integrated Management System solution architecture Power Apps forms, document libraries and compliance schedules feed SharePoint registers on a hub and department sites, set up by repeatable PowerShell scripts. Power Automate numbers every record, scores and escalates risk, opens a corrective action when a high risk stays open 14 days, and logs every action. A scheduled flow rolls all sites into one metrics snapshot that feeds Power BI, secured by role, while a shared audit logger builds the audit trail. Both reach leadership and auditors. CAPTURESTOREAUTOMATEAGGREGATESERVEUSERS Power AppsRisks, incidents, CAPAs Document librariesProcedures, bids, projects SchedulesReviews, audits, renewals SharePointHub + department sites PowerShellRepeatable setup Power Automate Number every record Score and escalate risk CAPA after 14 days open Log every action ScheduleEvery 30 minutes Metrics snapshotEvery site, one table Audit loggerShared by every flow Power BISecured by role Audit trailEvidence on demand Leadershipand auditors

Records move through the orange path on their own. Nobody chases an approval, numbers a record or compiles a report by hand.

The problem

Compliance shouldn't live in inboxes.

The contractor was working toward ISO 9001, 14001 and 45001 and API Q1 and Q2. Its risks, incidents, corrective actions, permits and documents sat in separate registers across ten departmental sites, and approvals were chased by hand. Proving compliance to an auditor meant rebuilding the story from emails and spreadsheets.

A colleague had provisioned the SharePoint foundation. I built what makes it run: the entry apps, the workflows, the audit trail and the executive reporting. What is demonstrated here is the pre-production build, before the system went live.

How it works

Eight rules, applied to every record.

  1. CapturePower Apps forms for risks, incidents, corrective actions and audit findings fill in the user and date themselves.
  2. NumberEvery record gets a structured ID of type, department, sequence and revision, generated in the workflow.
  3. ScoreRisk is likelihood times impact: 15 and above is High, 6 and above is Medium.
  4. EscalateHigh risks alert their owners in Teams, and one left open 14 days raises its own corrective action.
  5. LinkRecords reference each other across sites by ID, because SharePoint lookups stop at the site boundary.
  6. Run the businessFlows carry the contractor's own processes, from bid and tender to project closeout and management review.
  7. LogEvery flow calls one shared audit logger, so every action lands in a single trail.
  8. ReportEvery 30 minutes, counts from every site land in one snapshot table that feeds Power BI.
See it working

The executive dashboards.

Open the dashboards (PDF) ↗

Exported from Power BI, with the client's name and staff names removed. Open the PDF ↗

Built to be trusted

In a compliance system, the record is the product. Every workflow writes to the same audit logger, the lists the workflows depend on are created by PowerShell scripts that can run twice without breaking anything, and each Power BI view is mapped to the Azure AD group allowed to see it.

Every action leaves an audit record, written by one logger every workflow shares.

Power AppsPower AutomateSharePointPower BIDAXPowerShellAzure AD
← All works

Case study · Automation · Google · 2025

YAAG

Year at a Glance. A planning sheet that runs a private calendar: the person who plans the diary works in Google Sheets, and the person who lives by it only ever opens Google Calendar.

Solution architecture
YAAG solution architecture An assistant plans in a Google Sheet with a year grid and a day list that mirror each other on every edit. Apps Script mirrors the two views, applies start and end times, then creates, updates or deletes events and stores each event ID. Events land in one dedicated calendar that the executive overlays on their own, so the executive only ever sees the calendar. PLANNERPLANSYNCCALENDAREXECUTIVE AssistantOwns the plan Year gridTwelve months, one screen Day listTimes and notes Apps Script Mirror grid and list Apply start and end times Create, move or delete Remember each event ID Dedicated calendarOverlaid, never the main one ExecutiveOnly sees the calendar

The assistant works on the left, the executive lives on the right, and the calendar in between is the only thing they share.

The problem

A diary shouldn't need two people inside it.

A senior executive's calendar holds everything: board meetings, travel, family, private appointments. The person who actually runs the diary, an assistant or chief of staff, needs somewhere to plan, move and clear commitments. Giving them full access to the calendar exposes all of it. Running it through messages means double entry, missed changes and events that should have been cancelled weeks ago.

YAAG started as my own year plan. Every project on this page began as a line on one of its dates.

How it works

Plan in the sheet. Live in the calendar.

  1. PlanThe year sits on one sheet: twelve months side by side, one line per day.
  2. MirrorEdit a day on the year grid or on the day list and the other updates instantly, deletions included.
  3. ScheduleEvery day carries a start and end time from a dropdown, with sensible defaults.
  4. SyncOne run creates new events, moves changed ones and deletes cleared ones, keyed on a stored event ID so nothing is ever duplicated.
See it working

The year sheet.

The YAAG year sheet: twelve months side by side, a date, day and objective for every day, with the objectives blurred
The real 2025 year sheet, with every plan blurred. The calendar it feeds stays private. Opens full size.
Private by design

YAAG writes to one dedicated calendar and nothing else. The executive shares that calendar with whoever runs the sheet and lays it over their own, so the assistant can manage every commitment without ever seeing the main calendar or anything else in it.

The assistant manages the plan. The calendar, and everything else in it, stays the executive's.

Apps ScriptGoogle SheetsGoogle CalendarJavaScript
← All works

Case study · Business Intelligence · SQL · 2025

Aura Churn Intelligence

Churn and retention analytics for Aura Beauty Salon in New Zealand. Built off the Zenoti API: salon records funnelled into a cloud MySQL database, SQL views that do the heavy lifting, and a Power BI app that shows which clients are drifting away before they are gone.

Solution architecture
Aura Churn Intelligence solution architecture Clients, bookings, payments and reviews come from the Zenoti API. A scheduled Python job in the cloud funnels them into a cloud-hosted MySQL database with keys and indexes. SQL views pre-compute daily revenue and bookings, each client's status every month, cohort retention and staff performance. A Power BI semantic model with DAX measures refreshes from the cloud database on a schedule and serves a live report to the salon owner. SOURCEINGESTSTOREMODEL IN SQLSEMANTICSERVEUSERS Zenoti APISalon records Python jobScheduled, in the cloud Cloud MySQLHosted, indexed SQL views Daily revenue, bookings Client status by month Cohort retention Staff performance Power BI modelDAX measures Power BI appScheduled refresh Salon ownerActs before lapse

Most of the logic lives in SQL, not in the dashboard, so every figure can be queried and checked on its own.

The problem

Clients don't cancel. They just stop coming.

A salon lives on repeat visits. When a regular drifts away there is no cancellation and no complaint, only a gap in the diary that nobody notices until revenue dips months later. By then the client has found someone else.

Aura needed to see that drift while it could still be reversed: who is slipping, which services and staff keep clients coming back, and whether lapsed clients can be won back. The data architecture is built off the Zenoti API, the salon software: records are funnelled from the API into SQL, so the same pipeline plugs into any Zenoti account. The figures shown are modelled.

How it works

Eight steps from booking to warning.

  1. IngestA scheduled Python job in the cloud pulls clients, bookings, payments and reviews from the Zenoti API, field for field.
  2. StoreEverything lands in a cloud-hosted MySQL database with primary and foreign keys and proper indexes.
  3. ShapeSQL views pre-compute daily revenue, bookings and staff time, so the report never recalculates raw rows.
  4. ClassifyEvery client, every month, is marked Active, At-Risk or Churned from the days since their last visit.
  5. CohortClients are grouped by the month they first visited and followed month by month.
  6. MeasureDAX turns the views into retention, churn, win-back, lifetime value and no-show rates.
  7. ExploreEvery page filters by service, staff member, loyalty tier and client type.
  8. PublishThe Power BI app refreshes from the cloud database on a schedule, so the salon always opens today's numbers.
See it working

The live report.

Live and fully interactive. Open it full screen ↗

Built on a real database

The dashboard is the last step, not the engine. Relationships and constraints live in the cloud MySQL database, the heavy aggregation lives in SQL views, and Power BI only reads results that are already correct. Change a rule once in SQL and every page follows.

Every number in the report comes from a SQL view that can be run and checked on its own.

MySQLSQLPythonPower BIDAX
← All works

Case study · Automation · 2026

Oze

Personal AI Job Board. It reads every new opening so I don't have to, scores each one against my CV, and sends me only the few worth my time.

Solution architecture
Oze solution architecture A scheduler starts each run three times a week. Oze collects openings from several job sources into an n8n workflow that normalises, prefilters, deduplicates and queues them. An AI model scores every job against the CV, the results are ranked and capped, and each run writes a job log, a health report and alerts to the phone. Strong jobs not yet sent carry over to the next run, and a separate error workflow raises an alarm if a run crashes. SCHEDULECOLLECTPROCESSSCORERANKDELIVER SchedulerThree runs a week Job source ANew openings Job source BNew openings Job source C…New openings n8n workflow Normalise records Prefilter Deduplicate Queue for scoring Error workflowAlarm if a run crashes AI scoringEvery job vs my CV Rank and capTop five per run Job logEvery job, every status Health reportEvery stage, every run Phone alertsThe best matches MeOnly what's worth it carryover
The live Oze workflow in n8n
The live workflow in n8n. The orange path above runs unattended; strong jobs not yet sent carry over to the next run.
The problem

Job hunting shouldn't be a full-time job.

Anyone who has searched for a job knows the grind: the same roles posted across many sites, different filters on each, and the few genuine fits buried under thousands that aren't. Reading them properly takes hours every week, and the best opportunities are still easy to miss.

More searching isn't the answer. What's needed is something that reads everything, judges each role the way a careful person would, and only interrupts when a job is worth the time. That is what Oze does.

How it works

Eight steps, every run, no one watching.

  1. ScheduleRuns three times a week, each run covering exactly the time since the last.
  2. CollectPulls new openings from several job sources in one pass.
  3. NormaliseReshapes every source into one clean, comparable record.
  4. PrefilterCheap rules drop obvious mismatches before anything costs money.
  5. DeduplicateCatches the same job posted twice, on two sites or as a repost.
  6. ScoreAn AI model reads each description against my CV and returns a structured verdict.
  7. Rank and capOnly the top five become alerts. Strong jobs not yet sent compete again next run.
  8. DeliverAlerts to my phone, a full log in a spreadsheet, and a health report on every run.
The first nine days · 19 to 27 Sep 2026

1,634 jobs read. 30 worth sending.

Read and scoredevery new opening, by AI1,634
Worth a lookrated 4 out of 10 or better279
Sent as alertsthe best of each run30
Top-rated7 out of 10, every one alerted10

Not a single scoring failure across all 1,634 jobs. Nothing below the cap is lost either: every scored job stays in the log.

Built to fail loudly

A job source that quietly returns nothing looks exactly like a slow market, so Oze checks itself on every run, raises an alarm when anything breaks, and stops outright when data arrives in a shape it doesn't expect.

When Oze is silent, the market is quiet. It never means something broke.