Skip to main content
New Expensify offers multiple ways to create expenses, from quick manual entry to scanning receipts with SmartScan. This guide covers all methods for creating and submitting expenses.

Creating an Expense

From the Global Create Button

The fastest way to create an expense:
  1. Click the green + button in the bottom-right corner (mobile) or top navigation (desktop)
  2. Select Submit expense or Track expense
  3. Choose your expense type from the tabs:
    • Manual: Enter amount and details manually
    • Scan: Capture or upload a receipt
    • Distance: Track mileage (for travel expenses)
    • Per Diem: Record daily allowances (if enabled)
function IOURequestStartPage({
    route,
    route: {
        params: {iouType, reportID},
    },
    navigation,
    defaultSelectedTab = CONST.TAB_REQUEST.SCAN,
}: IOURequestStepAmountProps) {
    const tabTitles = {
        [CONST.IOU.TYPE.REQUEST]: translate('iou.createExpense'),
        [CONST.IOU.TYPE.SUBMIT]: translate('iou.createExpense'),
        [CONST.IOU.TYPE.SPLIT]: translate('iou.splitExpense'),
        [CONST.IOU.TYPE.TRACK]: translate('iou.createExpense'),
    };

    return (
        <OnyxTabNavigator
            id={CONST.TAB.IOU_REQUEST_TYPE}
            defaultSelectedTab={defaultSelectedTab}
            onTabSelected={onTabSelected}
            tabBar={TabSelector}
        >
            <TopTab.Screen name={CONST.TAB_REQUEST.MANUAL}>
                {() => (
                    <IOURequestStepAmount
                        shouldKeepUserInput
                        route={route}
                        navigation={navigation}
                    />
                )}
            </TopTab.Screen>
            <TopTab.Screen name={CONST.TAB_REQUEST.SCAN}>
                {() => (
                    <IOURequestStepScan
                        route={route}
                        navigation={navigation}
                        isMultiScanEnabled={isMultiScanEnabled}
                        setIsMultiScanEnabled={setIsMultiScanEnabled}
                    />
                )}
            </TopTab.Screen>
        </OnyxTabNavigator>
    );
}

From a Chat

Create an expense directly in a conversation:
  1. Open a chat with a coworker or workspace
  2. Click the attachment icon or + button
  3. Select Request money or Submit expense
  4. Follow the expense creation flow

Via Drag and Drop

Quickly create expenses by dragging receipts:
  1. Drag a receipt image or PDF onto the app
  2. Drop it on the workspace or chat
  3. The expense is automatically created with SmartScan processing
Drag and drop is available on desktop web and desktop apps.

Manual Expense Entry

Step 1: Enter Amount

Start by entering the expense amount:
function IOURequestStepAmount({
    report,
    route: {
        params: {iouType, reportID, transactionID, backTo, action},
    },
    transaction,
}: IOURequestStepAmountProps) {
    const {translate} = useLocalize();
    const {getCurrencyDecimals} = useCurrencyListActions();
    
    const [selectedCurrency, setSelectedCurrency] = useState(originalCurrency);
    const decimals = getCurrencyDecimals(selectedCurrency || CONST.CURRENCY.USD);
    
    return (
        <MoneyRequestAmountForm
            isEditing={isEditing}
            currency={selectedCurrency}
            amount={transactionAmount}
            decimals={decimals}
            onSubmitButtonPress={onSubmitButtonPress}
        />
    );
}
Features:
  • Type the amount using the numeric keypad
  • Click the currency to change it
  • Support for negative amounts (when enabled)
  • Automatic decimal formatting based on currency
Recently used currencies appear at the top of the currency list for quick access.

Step 2: Add Merchant

After entering the amount, add the merchant name:
  • Type the merchant name or select from recent merchants
  • The field auto-suggests previously used merchants
  • You can skip this step and add it later

Step 3: Select Date

Choose when the expense occurred:
  • Defaults to today’s date
  • Click to open the date picker
  • Use the calendar to select any date
  • Date range may be restricted by policy settings

Step 4: Add Category (if required)

Categorize your expense:
  • Select from available categories in your workspace
  • Some policies require categories before submission
  • Categories may have spending limits or rules
  • Recent categories appear first

Step 5: Add Description (optional)

Provide additional context:
  • Add notes about the expense
  • Explain the business purpose
  • Include any relevant reference numbers
  • This field is optional but recommended

Step 6: Add Tags (if enabled)

Apply custom tags:
  • Tags are defined by your workspace admin
  • Multiple tag levels may be available
  • Some tags may be required by policy
  • Tags help with reporting and analysis

Step 7: Set Billable (if enabled)

Mark expenses for client billing:
  • Toggle the Billable switch
  • Billable expenses can be invoiced to clients
  • This setting is workspace-specific

Step 8: Review and Submit

The confirmation screen shows all expense details:
function IOURequestStepConfirmation({
    report,
    route: {
        params: {iouType, reportID, transactionID, action},
    },
    transaction,
}: IOURequestStepConfirmationProps) {
    const onConfirm = useCallback(() => {
        if (iouType === CONST.IOU.TYPE.TRACK) {
            trackExpenseIOUActions({
                report,
                transaction,
                policy,
                isASAPSubmitBetaEnabled,
            });
        } else {
            requestMoneyIOUActions({
                report,
                transaction,
                policy,
                isASAPSubmitBetaEnabled,
            });
        }
    }, [iouType, report, transaction, policy]);

    return (
        <MoneyRequestConfirmationList
            transaction={transaction}
            onConfirm={onConfirm}
            isReadOnly={false}
        />
    );
}
Review checklist:
  • ✓ Amount is correct
  • ✓ Merchant name is accurate
  • ✓ Date is set properly
  • ✓ Category is selected (if required)
  • ✓ All required fields are filled
Expenses with missing required fields cannot be submitted. The system will highlight any issues.

Receipt-Based Expenses

Uploading a Receipt

  1. Select the Scan tab when creating an expense
  2. Choose your upload method:
    • Take Photo: Use your device camera
    • Choose File: Upload from your device
    • Drag & Drop: Drop a file onto the screen
  3. Wait for SmartScan to process the receipt
  4. Review and adjust extracted details
  5. Add any missing information
  6. Submit the expense
SmartScan automatically extracts amount, merchant, date, and currency from receipts. See the SmartScan documentation for details.

Supported Receipt Formats

src/CONST.ts
const API_ATTACHMENT_VALIDATIONS = {
    ALLOWED_RECEIPT_EXTENSIONS: [
        'jpg',
        'jpeg',
        'png',
        'pdf',
        'gif',
        'bmp',
        'svg',
        'webp',
    ],
    MAX_SIZE: 10485760, // 10MB
};
Supported formats:
  • Images: JPEG, PNG, GIF, BMP, SVG, WebP
  • Documents: PDF
  • Maximum file size: 10MB per receipt

Receipt Requirements by Amount

Some policies require receipts for expenses over a certain amount:
  • Under threshold: Receipt optional
  • Over threshold: Receipt required
  • Missing receipt: Expense may be rejected or flagged

Editing Expenses

You can edit expenses before they’re approved:

Edit Draft Expenses

  1. Open the expense from your chat or expenses list
  2. Tap any field to edit it
  3. Make your changes
  4. Changes save automatically

Edit Submitted Expenses

For submitted expenses:
  1. Open the expense details
  2. Click Edit expense
  3. Modify the necessary fields
  4. Click Save to update
Once an expense is approved or reimbursed, you cannot edit it. Contact your admin if changes are needed.

Quick Action Shortcuts

For faster expense creation, use quick actions:

Skip Confirmation

Workspace admins can enable Skip Confirmation for:
  • Personal workspace expenses
  • Track expenses
  • Specific expense types
When enabled, expenses skip the confirmation screen and submit immediately.
const shouldSkipConfirmation: boolean = useMemo(() => {
    if (isSplitBill || !skipConfirmation || !report?.reportID) {
        return false;
    }
    return !(isReportArchived || isPolicyExpenseChat(report));
}, [report, isSplitBill, skipConfirmation, isReportArchived]);

ASAP Submit

With ASAP Submit enabled:
  • Expenses submit immediately after creation
  • No manual submit action required
  • Available for certain workspace configurations
  • Streamlines the expense workflow

Common Scenarios

Submitting to a Workspace

  1. Create the expense from a workspace chat
  2. The expense automatically associates with that workspace
  3. Workspace-specific categories and tags appear
  4. Policy rules are applied automatically

Tracking Personal Expenses

  1. Select Track expense instead of Submit expense
  2. Tracked expenses go to your personal workspace
  3. They don’t require approval or reimbursement
  4. Perfect for tax deductions or personal records

Requesting Money from a Friend

  1. Open a chat with the person
  2. Click Request money
  3. Enter the amount and details
  4. They’ll receive a payment request
  5. They can pay directly through the app

Expense Violations

The system checks for violations during creation:

Automatic Checks

  • Duplicates: Detects similar expenses
  • Policy limits: Verifies amount is within limits
  • Required fields: Ensures all mandatory fields are filled
  • Receipt requirements: Checks if receipt is needed
  • Category rules: Validates category selection

Resolving Violations

If violations are detected:
  1. Review the violation message
  2. Fix the issue (edit amount, add receipt, etc.)
  3. Resubmit the expense
  4. Contact your admin if you need assistance
Some violations are warnings and won’t block submission, while others must be resolved.

Deleting Expenses

Delete Draft Expenses

  1. Open the expense
  2. Click the three dots menu
  3. Select Delete expense
  4. Confirm the deletion

Delete Submitted Expenses

For submitted expenses:
  1. Open the expense
  2. Click Delete expense (if available)
  3. Add a reason for deletion
  4. Submit the deletion request
You cannot delete approved or reimbursed expenses. These must be handled through policy adjustments.

Best Practices

Don’t wait until later—take a photo or upload the receipt right away to avoid losing it.
SmartScan reduces manual entry errors by automatically extracting details from receipts.
Brief notes help approvers understand the business purpose and process expenses faster.
Double-check amounts, merchants, and dates to avoid corrections later.
Don’t let expenses pile up—submit them regularly to maintain accurate records.

Troubleshooting

Expense Won’t Submit

Possible causes:
  • Missing required fields
  • Policy violations
  • Network connectivity issues
  • Receipt upload still processing
Solutions:
  • Check for red error messages
  • Ensure all required fields are filled
  • Wait for SmartScan to complete
  • Try again with a stable internet connection

Can’t Find My Expense

Check these locations:
  • Draft expenses in your workspace chat
  • Submitted expenses in the report
  • Unreported expenses list
  • Search by merchant or amount

Receipt Upload Failed

Try these steps:
  • Check file size (max 10MB)
  • Verify file format is supported
  • Ensure stable internet connection
  • Try uploading again
  • Convert PDF to image if needed

Next Steps

SmartScan Technology

Learn how SmartScan automates expense data extraction

Distance Tracking

Track mileage for travel expenses

Split Expenses

Share costs with multiple people

Per Diem Expenses

Submit daily allowance expenses

Build docs developers (and LLMs) love