# Facteur and Mailosaur · Facteur

> What Mailosaur publishes about its plans, its daily email limit, its SMS and its API, with sources and their date, then what Facteur does.
> https://facteur.eu/en/comparisons/mailosaur

/ Comparison

#  Facteur and Mailosaur 

 Mailosaur receives test emails in servers. Its Core plan shows SMS separately. Here is what it publishes, then what Facteur does.

 [ See Facteur's pricing ](/en/pricing) [ All comparisons ](/en/comparisons) 

 

 Sources

## What Mailosaur publishes

Each line is something Mailosaur publishes. It carries the address of the page where we read it and the date we read it. What we could not check is not here. These pages change: read the source again before you decide.

 

1. 01
    
    The pricing page shows three plans: Personal from $20 per month and Core from $50 per month, billed annually, and Enterprise on quote.
    
     <https://mailosaur.com/pricing> · 25/10/2026
2. 02
    
    The Personal plan shows 15,000 inbound emails per month, based on a daily limit of 500. The Core plan shows 75,000 inbound emails per month, based on a daily limit of 2,500.
    
     <https://mailosaur.com/pricing> · 25/10/2026
3. 03
    
    The Personal plan includes one inbox, with unlimited email addresses. The Core plan includes multiple inboxes.
    
     <https://mailosaur.com/pricing> · 25/10/2026
4. 04
    
    On the Core plan, the page shows "SMS and authentication" from $37.50 per month, and email previews from $25 per month.
    
     <https://mailosaur.com/pricing> · 25/10/2026
5. 05
    
    The Node client installs with npm install mailosaur and is built with new MailosaurClient(key). Its messages.get(serverId, { sentTo }) method waits for the first matching email, 10 seconds by default, a delay the timeout option extends.
    
     <https://mailosaur.com/docs/email-testing/nodejs> · 25/10/2026
6. 06
    
    The codes found in a message are in the html.codes and text.codes arrays, each with a value property.
    
     <https://mailosaur.com/docs/test-cases/codes> · 25/10/2026
7. 07
    
    The API reference documents GET /api/servers, POST /api/messages/search, GET /api/messages/:id, GET /api/files/attachments/:id, GET /api/files/email/:id (the .eml file), GET /api/analysis/deliverability/:id, POST /api/devices/otp and GET /api/usage/limits.
    
     <https://mailosaur.com/docs/api> · 25/10/2026
 
 

 Translating your tests

## The same test, with one then the other

Both clients wait for the message. What changes: the inbox id replaces the serverId, and the code is read from the otp field instead of html.codes.

 

       Before, with Mailosaur JavaScript 

 

```
<span class="hl-comment">// The Mailosaur client, and the code looked up in the body.</span>
<span class="hl-keyword">const</span> MailosaurClient = <span class="hl-property">require</span>(<span class="hl-value">'mailosaur'</span>);
<span class="hl-keyword">const</span> mailosaur = <span class="hl-keyword">new</span> <span class="hl-type">MailosaurClient</span>(process.<span class="hl-property">env</span>.<span class="hl-property">MAILOSAUR_API_KEY</span>);

<span class="hl-comment">// Waits for the first matching message, 10 seconds by default.</span>
<span class="hl-keyword">const</span> message = <span class="hl-keyword">await</span> mailosaur.<span class="hl-property">messages</span>.<span class="hl-property">get</span>(serverId, {
  <span class="hl-property">sentTo</span>: address,
});

<span class="hl-keyword">const</span> code = message.<span class="hl-property">html</span>.<span class="hl-property">codes</span>[0].<span class="hl-property">value</span>;
```

 Every call of Mailosaur shown here comes from its documentation: the Sources section gives the page and the date it was read.        After, with Facteur TypeScript 

 

```
<span class="hl-comment">// No Facteur package to install: one HTTP call that waits.</span>
<span class="hl-keyword">const</span> search = <span class="hl-keyword">new</span> <span class="hl-type">URLSearchParams</span>({
  <span class="hl-property">inbox</span>: <span class="hl-value">'j3k9x2mq'</span>,
  <span class="hl-property">sentTo</span>: address,
  <span class="hl-property">wait</span>: <span class="hl-value">'30000'</span>,
});

<span class="hl-keyword">const</span> response = <span class="hl-keyword">await</span> <span class="hl-property">fetch</span>(<span class="hl-value">'https://api.facteur.eu/v1/messages?'</span> + search, {
  <span class="hl-property">headers</span>: { <span class="hl-property">authorization</span>: <span class="hl-value">'Bearer '</span> + process.<span class="hl-property">env</span>.<span class="hl-property">FACTEUR_API_KEY</span> },
});
<span class="hl-keyword">const</span> { messages } = <span class="hl-keyword">await</span> response.<span class="hl-property">json</span>();

<span class="hl-comment">// The code is already extracted, in a field of its own.</span>
<span class="hl-keyword">const</span> code = messages[0].<span class="hl-property">otp</span>;
```

 Facteur publishes no library yet: the test calls the API over HTTP. The developers' portal plays this call against the service.  

 

 The migration, step by step

## Four steps, both services side by side

 

1. Step 01
    
    ### Create an account and an inbox
    
    The inbox id, eight characters, plays the part of the serverId. Any address of the inbox's domain lands in it.
2. Step 02
    
    ### Point your sends at the inbox
    
    Your scenarios write to an address of the Facteur inbox's domain, with one tag per test after the "+".
3. Step 03
    
    ### Replace messages.get
    
    Facteur's search takes inbox, sentTo and wait, and waits for the message. The code is read from otp instead of html.codes\[0\].value.
4. Step 04
    
    ### Run the suite, then cancel
    
    Keep both accounts until the suite is green: there is no data to export and no DNS to switch.
 
 

 The switch, in short

## What changes, row by row

Each cell about Mailosaur links to the sentence of the sources it comes from. A row that no source lets us write is not in the table.

 

    Topic Facteur Mailosaur      Waiting for a message   The search waits up to the delay you set, five minutes at most.   messages.get waits 10 seconds by default, longer with the timeout option. [source](#claim-client)     Reading the code   otp holds the most likely code, codes all the ones found.   html.codes and text.codes, each with its value property. [source](#claim-codes)     Volume   The included volume counts over the billing period; only the overage is bounded per day.   The Personal and Core plans state their volume based on a daily limit. [source](#claim-daily)     SMS   SMS inboxes exist, but the connection to the carrier is not in service: no real SMS arrives today.   "SMS and authentication" shown separately on the Core plan. [source](#claim-sms)     .eml source, deliverability, TOTP   None of these three routes in the public API.   One route for each. [source](#claim-api)    

 

 Facteur

## What Facteur does

These lines describe Facteur as its product pages and help centre give it.

 

01

### One address per test

Everything before the at sign is free. Two tests writing to inscription+run-42 and inscription+run-43 each get their own message, in the same inbox.

 

02

### Wait for the message in one request

The search accepts a wait of five minutes at most. If nothing arrives, it answers an empty list, not an error.

 

03

### The code, already extracted

The otp field holds the most likely one-time code. When nothing announces it, Facteur leaves it empty rather than guess.

 

04

### Reading costs nothing

Only a received, kept message counts against your plan. A test that receives 3 emails and reads them 40 times uses 3.

 

05

### Deleted when its time is up

Each message is deleted when your plan's duration has passed, with its raw file and attachments.

 

06

### Hosted at OVHcloud

The application and its database are hosted at OVHcloud, and billing is in euros. The data centre is in France.

 

07

### SMS are not received yet

The connection to the carrier that delivers SMS is not in service. An assigned number receives no real SMS today.

 







 

 

 Choosing

## Frequently asked questions

 

   When to look at Mailosaur? +− Mailosaur publishes routes for a message's .eml source, deliverability analysis and TOTP codes, and email previews on its Core plan. Facteur has none of these features. If your suite depends on them, look at Mailosaur.

    How much work is the migration from Mailosaur? +− The client and the call that waits for the message change, and the assertion on the code gets shorter. The Migrate from Mailosaur page gives the mapping of each API call.

    What happens to the messages already received at Mailosaur? +− They stay at Mailosaur. They are test messages: they come back on the next run of your suite.

    Where are Facteur's prices? +− On the Pricing page, which reads Facteur's grid. No Facteur price is written here.

  

 

  Other comparisons

## The other tools

The same approach for each tool: what it publishes, sourced and dated, then what Facteur does.

 

 [01

### Facteur and Mailisk

What Mailisk publishes about its namespaces, its SMS and its free plan, and what Facteur does.

 ](/en/comparisons/mailisk) [02

### Facteur and Mailtrap

What Mailtrap publishes about its email sandbox, HTML previews and plans, and what Facteur does.

 ](/en/comparisons/mailtrap) [03

### Facteur and MailSlurp

What MailSlurp publishes about its plans, inboxes and phone numbers, and what Facteur does.

 ](/en/comparisons/mailslurp) [04

### Facteur and Mailpit

What Mailpit publishes about its open source software, SMTP server and API, and what Facteur does.

 ](/en/comparisons/mailpit) [05

### Migrate from Mailosaur

The mapping of the API calls, one by one, and the ones that have no equivalent at Facteur.

 ](/en/migrate-from-mailosaur)

 

 

 

## Try Facteur without an account

The trial receives a test email, with no sign-up. Prices are on the Pricing page.

 [ Try without an account ](/en/test-an-email) [ See pricing ](/en/pricing)
