Skip to main content
Manual uploads let you import users or events by uploading a CSV directly in the MoEngage dashboard, useful for migrating from another platform, mass-updating attributes, or one-off historical loads without setting up a connection.
Manual uploads differ from automated file and warehouse imports in a few ways:
  • CSV only: JSON is not supported.
  • No periodic scheduling: You can run an upload immediately or at a specific date and time, but not on a recurring schedule.
  • No Object/JSON (complex) types: Mapping is done column by column in the dashboard.
Users and events have different entry points and workflows. Select the entity you’re importing.
User uploads let you create new user profiles or update attributes of existing users. Updating existing users never creates new users, it only updates those already in MoEngage.Entry point: Segment > User Imports > Import Users.

Step 1: Upload Your CSV

Choose the user list type and upload your file:
  • Registered Users: Users with a registered account. Your file must include a column with a unique user identifier, mapped to the ID attribute.
  • Anonymous Users: Users who have not signed up but whom you can recognize by an identifier (email, mobile number, and so on), mapped to the Anonymous ID attribute.
Download a sample file to see the expected format. Browse or drag-and-drop your CSV, specify whether the file contains headers, and optionally select update existing users only. Click Next.
If an identifier already exists in MoEngage, the existing user is updated with the new attributes. If it does not exist, MoEngage creates a new user with that identifier.

Step 2: Configure Columns

Map each CSV column to a MoEngage user attribute (or create a new one). You see the top 3 rows (excluding the header) and all columns.
  • Configure the identifier: For registered users, mark one column as ID. For anonymous users, mark a column as Anonymous ID.
  • Add new attributes: Click + and enter a unique attribute name.
  • Values with commas: Enclose any value containing a comma in double quotes, for example, "221B, Baker Street, London", otherwise only the text before the comma is imported.
  • Skip columns: Click Skip the column to exclude it. Toggle Show Skipped Columns to hide or re-include skipped columns.
Column names are case-sensitive and must match the attribute name on the dashboard exactly. Do not use moe_ as a prefix for events, event attributes, or user attributes, it is a reserved system prefix, and using it may result in periodic blacklisting without prior communication.

Save as a File Segment

Turn on Save as File Segment and enter a name to create a segment from the imported users, usable in campaigns.
  • Existing segment: Users are added in append mode, new users are added, none are removed.
  • New segment: Choose the update mode: Replace (each import fully replaces the segment’s users) or Append (each import adds users, none removed).
Do not use / or Unicode characters in the file segment name, or the import will fail.

Step 3: Schedule the Upload

Define when to run the import:
  • As soon as possible: Starts when you click Done.
  • At specific date and time: Runs at your selected start date and time.
After your first import, a Past Imports section shows previous imports and their status. You receive an email with the upload details once processing completes.
Channel reachability and custom segments for imported users are available within 2 hours of import completion. Plan your campaigns accordingly.

Reference

The following applies to both user and event uploads.

Supported Data Types

String, Numeric, Boolean, Datetime, and Array (String, Double, Float, Int).

Array Support

  • Simple arrays are supported. Nested and associated arrays are not supported.
  • The supported delimiter in the CSV is the pipe (|). For example: [1|2|3].
  • The supported data types are Array String and Array Double (numeric). Select the type in the Map column to attribute list during column mapping.
  • All elements in an array must be homogeneous, either all integer/double or all string. If they are not, MoEngage attempts to typecast each element to the declared type and stores the result.
  • Array typecasting: If an array ["1" | 2 | "abc"] is mapped as Array Integer, MoEngage ingests [1, 2], because "abc" cannot be cast to an integer and is dropped. For more information, see typecasting in MoEngage.

Supported Datetime Formats

Portfolio Support (Project-Level Routing)

You can route imported users and events to specific projects in your MoEngage portfolio workspace using column mapping. Map your identifier column (such as brand_name or app_id) to the MoEngage attribute moe_project_name. Values must match your MoEngage project names exactly (matching is case-sensitive).
  • Successful routing: If the value matches a project in your portfolio, MoEngage ingests the user or event at that project level.
  • Fallback: If the mapping is missing, blank, or does not match a project name, MoEngage ingests the data at your global portfolio level.

Language and Empty Values

MoEngage handles languages and empty values as follows:
  • Language: You can import data in any language using UTF-8 decodable characters.
  • Empty values: Empty values are still imported. MoEngage creates or updates the attribute with an empty value.

Limits

Manual uploads have the following limits:
  • File size: Less than 150 MB per CSV.
  • Rows: A single CSV file supports up to your hourly row limit. Files exceeding your hourly row limit are rejected. A file with fewer than 5 rows may cause errors, add dummy rows if needed.
  • Columns/Attributes: 100 columns for users; 100 columns per event.

What Is Not Supported

Manual uploads do not support the following:
  • Attribute type list and other complex types (JSON, dictionaries, and so on).
  • Newline formats other than \n, such as Ctrl+M and \r, are not supported.
  • JSON files.

Manage Your Imports

To monitor your imports, understand import statuses, or trigger a run manually or via API, see How Imports Work on the Imports Overview.

Frequently Asked Questions

Click the ellipsis on the right and click View to look up the Import details. Hover over the Failed Status to learn the reason.
In such cases, the new data will still be added to the archived segment. You can unarchive the segment as required.
Once an import process starts, it can’t be stopped midway. This is because the data goes through several steps, and interrupting it could lead to incomplete or inconsistent results. It’s best to let the current import finish.
Yes, you can stop future scheduled imports from running automatically. To do this, find the import schedule and select the Archive option from the Actions menu on the Data Imports dashboard. This will prevent it from running on its next scheduled time.
If an import appears to be stuck or is taking longer than usual, it’s best to wait. The system has checks in place to handle these situations automatically and retry if necessary. Manually starting the same import again while it’s still processing can cause conflicts and may prevent the original import from completing successfully.