WAQAF

Importing income in bulk

Bring in many income records at once from a spreadsheet — map the columns once, review every row, then record them all together.

When you have a whole month of bank transfers, a donation-platform export, or a long spreadsheet of receipts, you don't have to type each one into the income form. The import tool reads a CSV or Excel file, lines every row up against your categories, shows you exactly what will be recorded, and then writes them all to the income ledger in one go.

The import is driven by an import profile — a small saved recipe that tells WAQAF which column in your file is the amount, which is the date, which is the reference, and so on. You build that recipe once for each kind of file you receive (your bank's export, your Thawani export, and so on), and from then on importing is just upload, review, save.

Who can do this. You need a finance role that grants create — typically the Accountant or Finance Manager. Both can record income, build import profiles, and run an import. If you don't see the Import button, your role doesn't allow it; see Members & roles.

Where to find it. Finance → Income → Import. (Profiles are managed separately under Finance → Settings → Imports.)

Before you start: an import profile

An import needs a profile to read your file, so if this is the first time you're importing a particular kind of spreadsheet, create the profile first.

Open the import settings

Go to Finance → Settings and open the Imports section. You'll see a list of any profiles already set up, with a New button to add one.

Name it and pick a platform

Give the profile a name you'll recognise later (for example "Bank Muscat statement" or "Thawani export"). Choose the platform that best describes the file — Athar, Thawani, Bank CSV, or Custom for anything else. The platform is just a label to help you tell profiles apart; the column mapping below is what actually does the work.

Set the defaults

Choose the channel every imported row should be filed under (Bank, Thawani, Cash, WhatsApp, or Other), and optionally a destination account and a member to attach to every row in the file. These behave exactly like the matching fields on the manual income form — they're applied to each row so you don't repeat them.

Map the columns

This is the heart of the profile. For each WAQAF field — Amount, Date, Source / donor, Reference, Note, Category — type the exact column heading from your spreadsheet. Amount and Category are always required; the others are optional and you can switch them off if your file doesn't have them.

Map your file's categories (optional)

If your file already names a category in its own words (for example "Zakat" or "General fund"), add category mappings so those words are matched to your WAQAF categories automatically. You can leave this empty and map any unrecognised value during the review step instead — and you'll be offered the chance to save what you map back into the profile.

Add filter columns (optional)

If your file mixes rows you want with rows you don't (a "Status" column with both Settled and Pending, say), add that column heading as a filter column. During review you'll get tick-boxes to keep or drop each value.

Running an import

Once you have a profile, importing a file is a four-step wizard: choose the profile, upload the file, review every row, then record them.

Choose a profile

Open Finance → Income → Import. Pick the profile that matches the file you're about to upload, then continue to the upload step. (If no profiles exist yet, there's a link here to create one.)

Upload the file

Drag your spreadsheet onto the upload box, or click to browse for it. WAQAF accepts .csv, .xlsx, and .xls files. The file is read in your browser and parsed straight away — nothing is recorded yet.

Uploading a file never records anything on its own. Records are only written when you press the commit button on the review step, after you've seen the table.

Review every row

This is where you check the work before anything touches the ledger. Each row from your file appears in a table with a status badge:

  • Matched — ready to record. Its category, date and amount were all read cleanly.
  • Needs category — the row's category couldn't be matched. You'll be prompted to pick a WAQAF category for it (see below).
  • Duplicate in file — the same reference appears more than once in this file.
  • Filtered out — dropped by one of your filter-column tick-boxes; it won't be recorded.
  • Recurring skipped — matched to a recurring pledge whose cycle is already recorded.
  • Error — the amount or date couldn't be read for that row.

A summary line at the top counts each status, so you can see at a glance how many rows are ready and how many need attention.

Resolve anything that needs a category

For each unmatched category value, a prompt appears with a category picker. Choose the right WAQAF category and the matching rows turn green. You cannot record until every "needs category" prompt is resolved — the commit button stays disabled and tells you so.

If you'd like WAQAF to remember these choices for next time, switch on Save these mappings to the profile before you commit. The same goes for filter choices, with the Remember these filters switch.

Tidy up dates and filters if needed

If your file uses an ambiguous numeric date (where 03/04 could be 3 April or 4 March), use the date format selector at the top of the review step to force day-month or month-day order for the whole file. Use the filter tick-boxes to keep or drop rows by the values in your filter columns; the Select all / Select none buttons help with long lists.

Record them

When the commit button is enabled, it tells you how many rows are ready — for example Record 84 rows. Press it. WAQAF writes the rows to the income ledger and posts each one to the accounts. A large file is recorded in batches with a progress bar; you'll land on a summary listing every reference that was created.

From the summary you can print receipts for the whole batch, import another file, or go back to the income ledger to see your new entries.

How duplicates are handled

Recording the same income twice is the thing this tool guards against most carefully.

  • A reference that's already in your ledger is blocked. The row is flagged and the message names the existing entry's reference (for example Reference "TXN-9001" already exists (DON-2026-0042)), so you can check it rather than create a second copy.
  • A reference repeated within the same file is blocked as a duplicate in file — a genuine data error in the export.
  • Rows with no reference at all (cash receipts, for instance) are not treated as duplicates of each other. Each gets its own automatic reference, so two separate gifts on the same day for the same amount are both kept.

Because of these checks, re-running the same file is safe — rows you already recorded are skipped, and only genuinely new rows go in. If an import stops partway through a large file (a row error in a later batch, say), the rows already recorded stay recorded; fix the flagged rows and run the file again to pick up the rest.

Every import is all-or-nothing per batch. If any row in a batch has an error, none of that batch is recorded — so you never end up with a half-imported chunk. The review step is designed to catch these before you commit.

A few things worth knowing

  • Amounts are OMR to three decimals. A value of 200 is read as 200.000 OMR. Negative amounts are rejected — income is always positive.
  • Nothing here can be silently undone. Imported income lives in the ledger like any other entry; a mistake is fixed with a reversing entry, never a delete. See Correcting or reversing income.
  • A "missing" button is usually a role limit. If you can't see Import, or can't manage profiles, your role simply doesn't grant it — that's the system working, not a bug.

See also

On this page