---
type: "product"
id: 339
url: "https://prestadev.pl/en/easy-newsletter-pro-newsletter-module-for-prestashop-with-a-campaign-builder-and-its-own-sending-engine.html"
markdown_url: "https://prestadev.pl/en/markdown/product/339.md"
title: "Easy Newsletter Pro - newsletter module for PrestaShop with a campaign builder and its own sending engine"
description: "Create newsletters with PrestaShop products and send them through the module’s own queue. Use HTML templates, recipient lists, CRON, and open-rate statistics."
image: "https://prestadev.pl/2282/easy-newsletter-pro-newsletter-module-for-prestashop-with-a-campaign-builder-and-its-own-sending-engine.jpg"
sku: "PDENPRO"
brand: "PrestaDev.pl"
price: 237.00
price_tax_excluded: 192.68
currency: "PLN"
tax_included: true
availability: "in_stock"
is_pack: false
customization_required: false
condition: "new"
categories: ["Main", "Newsletters and abandoned carts", "PrestaShop modules"]
language: "en"
updated: "2026-08-31"
---

# Easy Newsletter Pro - newsletter module for PrestaShop with a campaign builder and its own sending engine

**Easy Newsletter Pro** is a PrestaShop module that adds a complete newsletter tool to the administration panel: a four-step campaign builder, an HTML template library, its own sending engine with a queue, and open statistics — without an external mailing system and without a subscription. You build the campaign from products in the store catalog: using the search engine or in bulk from categories (bestsellers, new arrivals, everything), and the rendered product block is inserted in place of the **{products}** marker in the selected template. You choose recipients from among store customers and guests subscribed to the newsletter, from a list imported from a CSV file, and from your own mailing lists — fixed or dynamic, recalculated from saved filters each time they are used. Sending is done in batches, under a lock, with retries for failed addresses and with the option to pause, resume, and stop; it is powered either by an open browser tab or by a cron job on the server. Before launch, the module runs eleven checks — from the mail configuration in PrestaShop, through the presence of an unsubscribe link in every language, to the SPF and DMARC records of the sender's domain — and rows marked as blocking actually stop the sending.

## Description

### Module features and benefits

 - Newsletter fully inside PrestaShop — subscriber data, campaign content, and statistics remain in the store database, without passing the mailing list to an external provider and without fees based on the number of messages sent.
- Four-step campaign builder (template, products, recipients, sending) with preview at every stage and a summary before launch.
- Product block built from the store catalog: thumbnail, name, price, and link point to real products, with prices and stock status from the moment the campaign is prepared.
- Built-in sending engine with queue: batch processing, protection against parallel sending of the same campaign, retries for failed addresses, and resume after interruption — nothing is lost after closing the browser tab.
- Live sending console with one line for each attempt: time, address, result, and full mail server response in case of rejection — you can see exactly what the server rejected, without going into PrestaShop logs.
- Eleven pre-send checks that are not just decoration: a row marked as blocking prevents the campaign from starting and provides the specific reason.
- Sender domain diagnostics (MX, SPF, DKIM, DMARC) directly in the panel — these records determine whether Gmail and Yahoo treat bulk sending as authenticated.
- Compliance with unsubscribe requirements: one-click unsubscribe headers (RFC 8058) and an unsubscribe link required in every template language, checked before sending.
- Dry run mode lets you rehearse the entire campaign from start to finish — the engine goes through the whole queue, but no message leaves the store.
- Consent register reads evidence live from PrestaShop itself and never claims that someone gave consent if there is no record of it — an address without a recorded date is described as “no evidence”, not as consent.
- Bundled TinyMCE 6.8.6 editor under the MIT license — edit template content in WYSIWYG mode without downloading anything from a CDN.
- Five ready-made responsive email templates in Polish and English, installed together with the module and restorable with one button.
- Full support for multiple languages and multistore: subject and content separately for each language, campaign permanently assigned to one store.
- Interface fully translated into Polish, in a dual translation system supporting both classic dictionaries and the PrestaShop 1.7.8+ system.
- No Composer, no external PHP libraries, and no connections to external services during sending — the module uses PrestaShop’s own mail configuration.

 ### Main module functionalities

 - Dedicated tab in the admin panel (under the Customers menu) with eight sections: Dashboard, Campaigns, Templates, Recipients, Import, Consents, Statistics, and Settings.
- Campaign builder: step 1 — name and template, step 2 — products and block appearance, step 3 — recipients, step 4 — checks, schedule, and sending.
- Product search by name, reference, and EAN code, plus bulk adding from categories: 8 bestsellers, 8 newest products, or the entire category.
- Bestsellers calculated based on units sold in the last 30 days, exclusively from valid orders.
- Product block layout: 1, 2, or 3 columns and four card styles (Light, Dark, Bordered, Extended) with a custom color palette, product order changed with up/down arrows for each item.
- Message size warning measured server-side against Gmail’s clipping threshold (~102 kB) — before the campaign is sent truncated.
- Option to send a campaign entirely without a product block.
- Template library: five ready-made layouts (Classic (default), Promotion, Editorial, Minimal, Grid), creation of custom ones, duplication, preview, test sending, and a button to restore templates from the package.
- Email subject and content separately for each store language, edited in TinyMCE 6.8.6 without CDN.
- Seventeen placeholders for insertion into the template: {firstname}, {lastname}, {email}, {shop\_name}, {shop\_url}, {shop\_logo\_url}, {date\_text}, {unsubscribe\_link}, {view\_in\_browser}, {page\_new\_products}, {page\_best\_sales}, {page\_contact\_link}, {page\_sitemap}, {page\_my\_orders}, {page\_my\_addresses}, {page\_my\_vouchers}, {page\_my\_personal\_info} — plus {products} for the product block.
- Store page addresses in placeholders resolved for the campaign store and recipient language, using that language’s friendly URLs.
- Recipient selection: customer groups, recipient languages, imported CSV list, mailing lists, and excluded address list — with live counts (Native, Imported, Excluded, Total).
- Merging and deduplication of addresses from all sources by email address, with automatic subtraction of unsubscribed and excluded addresses.
- Static mailing lists (exactly the addresses you put into them) and dynamic ones (saved filters recalculated when the campaign is prepared), with the ability to rename, duplicate, export to CSV, and delete.
- Browser of all known addresses — customers, guests subscribed through the PrestaShop newsletter block, and imported addresses — in one place, with filters by source, status, language, and customer group.
- Segmentation by purchase history: minimum amount spent, minimum number of orders, purchase within the last N days, customers who purchased before but not in the last N days, purchase from a specific category, purchase of a specific product (ID), and no purchase of a specific product.
- Import of addresses from a CSV file in the format `email;firstname;lastname;iso` — only the email column is required, separator (semicolon, comma, or tab) detected automatically, header row skipped, up to 50,000 rows per file.
- Re-importing the same address updates its data instead of creating a duplicate; imported addresses can be added immediately to a selected mailing list.
- Immediate sending from the open browser tab or scheduled for a selected date and time and executed by a cron job.
- Sending engine parameters: batch size 1–500 messages (default 20), delay between messages 0–5000 ms (default 100), time budget for one run 5–45 s (default 20), and number of attempts per recipient 1–10 (default 3).
- Sending controls: Pause, Resume, and Stop, as well as taking over a campaign that was started in another tab or is being handled by cron.
- Live sending console in the form of a text window: one line for each attempt, with time, address, result (accepted, rejected and retried, abandoned, skipped), and full mail server message.
- Progress counters distinguishing Failed from Retried — an address rejected before exhausting attempts is visible immediately, not only after the campaign ends.
- Queue table with filtering by status (All, Failed, Sent, Pending, Skipped), grouping of errors by server response, and distinction between temporary errors (4xx) and permanent ones (5xx).
- Export of failed addresses to a CSV file directly from the sending screen.
- Eleven pre-send checks: PrestaShop mail sending method, correctness of envelope addresses (BCC and Reply-To), presence of recipients, frozen message content, unsubscribe link in every language, subject in every language, test message sent, sender address matching the store domain, SPF/DKIM/DMARC records, dry run mode, and one-click unsubscribe headers.
- Test sending to any address, in the selected language, also working when dry run mode is enabled.
- Dry run mode: the engine goes through the entire queue and marks recipients as sent, but the send call is not made — with a warning visible on the sending screen and in settings.
- Sender settings: sender address and name, Reply-To address for customer replies, and BCC archive copy of every campaign message (test messages are not archived).
- Cron job URL with secret key, information about the last run, warning when cron has not reported in for over an hour, and a button to generate a new URL; an invalid or missing key receives only 403.
- Sender domain diagnostics launched from the Settings tab: reading MX, SPF, DKIM, and DMARC records without making any changes.
- Open tracking with an invisible 1×1 pixel, with an option to disable it completely — when tracking is disabled, the pixel is not embedded at all and the number of opens remains zero.
- Click tracking: links in campaign content are registered during preparation and go through the module’s own redirect; the target address is read from the database by identifier, never from the request, so the redirect cannot be hijacked.
- Revenue attribution to campaigns using the last-click method within a 1–90 day window (default 7); the applied window is saved with each attributed order, so changing the setting does not rewrite history.
- Statistics tab: for each campaign, status, number of recipients, sent, failed, opens, open rate, attributed revenue, and start and end dates.
- Dashboard with period selection (all time, 7, 30, or 90 days) and seven blocks: key metrics, sends and opens over time chart, subscriber base, deliverability status, unsubscribes, recent campaigns, and top-performing campaigns.
- “View in browser” page for each campaign, personalized for the recipient and working also for campaigns not yet sent.
- Unsubscribe page without login, secured with a token: entering via the link displays a confirmation page, and unsubscribe happens only after confirmation — thanks to this, mail security scanners and link previews do not unsubscribe anyone by accident.
- Unsubscribe updates simultaneously the customer consent in PrestaShop, the entry in the guest subscription table, and the item on the imported list, and the address goes onto the shared unsubscribe list.
- Consent register: address source, recorded evidence (subscription date and IP address), information whether the address may be mailed, the last event recorded by the module, and export of the whole register to CSV.
- Unsubscribe list with search and the ability to remove an entry when the recipient requests subscription again.
- Campaign duplication and seven unambiguous statuses: draft, ready, scheduled, sending, paused, finished, and stopped.
- Campaign freezing during preparation: content, prices, products, and recipient list are fixed at the moment of preparation, not read again at the moment of actual sending.

 ### Email deliverability

 - Check of the mail sending method in PrestaShop: a store set to “never send emails” is detected before launch, instead of reporting the entire campaign as delivered.
- Check of envelope addresses (BCC and Reply-To) before sending — one address in a domain that does not accept mail can block the entire message, together with all real recipients.
- Reading SPF and DMARC records of the sender domain and checking the DKIM key for the selector used by PrestaShop.
- Comparison of the sender address with the store domain — bulk sending from someone else’s domain (e.g. a free mailbox) is the most common reason for landing in spam.
- `List-Unsubscribe` and `List-Unsubscribe-Post` headers compliant with RFC 8058, thanks to which mailbox providers show their own unsubscribe button (PrestaShop 1.7.5 and newer).
- Enforcement of the presence of an unsubscribe link in every saved campaign language — its absence blocks sending.
- Short pause after each message and batch processing so as not to overload the mail server and not to hit sending limits.
- Distinction between temporary rejections (4xx codes — e.g. greylisting, full mailbox) and permanent ones (5xx codes — e.g. non-existent address), visible for each error group.

 ### Consents, unsubscribes, and personal data

 - The consent register reads evidence directly from PrestaShop on every query (newsletter subscription date, subscription IP address, referring page address) — it does not create its own copy that could diverge from the store.
- An address without a recorded subscription date is described as “no evidence”, not as consent — the module never substitutes the account creation date or CSV upload date for the consent date.
- The module’s own event log records only what PrestaShop does not save: address import from a CSV file, unsubscribe via the module link, and changes in mailing list membership.
- Unsubscribe applies to the entire installation: an address unsubscribed in one campaign and one store is excluded from all future campaigns in all stores.
- An address on the unsubscribe list remains excluded regardless of how many times it is re-imported or switched back to active.
- Export of the consent register to a CSV file for documentation and audit purposes.
- Open tracking can be disabled completely if, in a given market, an unannounced tracking pixel is treated as a consent issue.

 ### Multistore and multilingualism

 - A campaign belongs to exactly one store — its recipients, product prices, and the store name and address in the content come from that store, never from the current panel context.
- The unsubscribe list and imported list are shared across the entire installation, which is a deliberate decision: opting out of receiving messages concerns the person and address, not one of the stores.
- Email subject and content set separately for each store language, with fallback to the default language when a given language has no own content.
- Recipient language filter at the recipient selection stage; imported addresses without their own language are counted as the store’s default language.
- Store page address placeholders expanded in the recipient’s language, using that language’s friendly URLs.

 ### Security and impact on the store

 - The module does not register any hook displaying content on the front end, so it adds nothing to catalog, cart, or order pages.
- The only custom front-end pages are: unsubscribe, email preview in browser, open pixel, click redirect, and cron job entry point — the module stylesheet is loaded only on the unsubscribe page.
- During installation, the module creates two helper indexes on customer and newsletter subscription tables so recipient counting does not scan entire tables; both are removed on uninstall.
- Saving sales attribution is performed on order creation and order status change, in a block catching all errors — newsletter statistics cannot break order placement.
- Unsubscribe and browser preview links are signed with the installation secret key; the token is a function of the address and key, so it cannot be guessed.
- The cron job URL is protected by a secret key — every call without the correct key gets 403 and nothing more.
- Every AJAX endpoint in the panel checks employee profile permissions (view or edit), and campaigns are limited to the store where the employee works.
- The unsubscribe page never displays the submitted email address when the token is invalid.
- The click redirect always ends on a store page, even with an unknown link or database error — a remedy to avoid losing the visit the campaign has just paid for.

 ### Business use cases

 - For stores that want to run a newsletter without a subscription to an external mailing system and without handing over their address database.
- For stores sending product campaigns — new arrivals, sales, bestsellers — where the email content should be composed of real products from the catalog.
- For merchants who must document the legal basis for sending: the consent register, unsubscribe log, and CSV export answer the question “where did you get my address from”.
- For stores after migration to PrestaShop 8 or 9 that need a newsletter working on the current core and PHP 8.x.
- For multistore shops where each store runs its own campaigns, but opt-outs must apply everywhere.
- For merchants reactivating dormant customers — segmentation by purchase history makes it possible to isolate those who bought before but not in recent months.

 ### Compatibility

 - PrestaShop: **1.7.x – 9.x**
- PHP: **7.0 – 8.5**
- MySQL 5.6+ / MariaDB 10.x+
- No Composer and no external PHP libraries; TinyMCE 6.8.6 (MIT license) bundled with the module.
- Sending is carried out through PrestaShop’s own mail configuration (SMTP or mail function), without an external API.

 ###
Link to the module demo:

 **Admin panel demo:**
[https://moduly-prestashop.eu/pdnewsletterpro/admin-dev](https://moduly-prestashop.eu/pdnewsletterpro/admin-dev)

**Front-end demo:**
[https://moduly-prestashop.eu/pdnewsletterpro](https://moduly-prestashop.eu/pdnewsletterpro)

## Features

| Feature | Value |
| --- | --- |
| Prestashop 9.x support | Yes |
| Support for Prestashop 8.x | Yes |
| Prestashop 1.7.x support | Yes |
| Module translations | EN, ENG |
| Free support | Yes |
| Free updates (1 year) | Yes |
| Easy Installation | Yes |

## Categories

- Main
- Newsletters and abandoned carts
- PrestaShop modules

## Related products

- [Newsletter Signup Page Pro module for PrestaShop](https://prestadev.pl/en/markdown/product/180.md)

## Questions and answers

### What is the Easy Newsletter Pro module used for?

Language: en

Easy Newsletter Pro adds a complete newsletter tool to the PrestaShop panel: a four-step campaign builder, an HTML template library, its own sending engine with a queue, and statistics. You build a campaign from products in the store catalog, choose recipients from customers, guests subscribed to the newsletter, addresses imported from CSV, and your own mailing lists, and then send it immediately or schedule it for a selected date. The module has eight tabs: Dashboard, Campaigns, Templates, Recipients, Import, Consents, Statistics, and Settings. You will find it in the Customers menu.

### Do I need an external mailing system to send the newsletter?

Language: en

No. Easy Newsletter Pro sends messages via PrestaShop’s own mail configuration — SMTP or the mail function — set in Advanced Parameters > E-mail. It does not connect to any external API, does not require an account with any mailing provider, and does not pass your address database to them. Subscriber addresses, campaign content, and statistics remain in your store’s database.

### How do I send a newsletter with products from my store?

Language: en

Go through the campaign wizard. In step 1, you give the campaign a name and choose a template; in step 2, you add products — using the search by name, reference, or EAN code, or in bulk from a category (8 bestsellers, 8 newest, entire category). You set the number of columns (1, 2, or 3), the card style (Light, Dark, With border, Expanded), and the product order, and the module immediately shows a preview. The rendered block is inserted at the {products} marker in the template; if the template does not contain it, the block is appended to the end of the message. The campaign can also be sent entirely without a product block.

### Where does the module get the recipients' addresses from?

Language: en

From four sources: store customers who have consented to the newsletter, guests subscribed via the PrestaShop newsletter block, addresses imported from a CSV file, and your own mailing lists. In step 3 of the wizard, you narrow them down by customer groups and recipient languages, and you can also indicate addresses to exclude. All sources are merged and deduplicated by e-mail address, and then reduced by unsubscribed and excluded addresses — on the screen you see the numbers live: Native, Imported, Excluded, and Total.

### What format should I prepare the CSV file with addresses for import in?

Language: en

The file should contain columns in the following order: email;firstname;lastname;iso, with only the email address column being required. The separator — semicolon, comma, or tab — is detected automatically, and the header row is recognised and skipped. The iso column is the store language’s two-letter code (e.g. pl, en); an empty or unknown value is replaced with the language selected in the import form. A single file may contain up to 50,000 rows, and re-importing the same address updates its data instead of creating a duplicate. Imported addresses can also be added immediately to the selected mailing list.

### What is the difference between a fixed list and a dynamic list?

Language: en

A static list contains exactly the addresses you add to it and does not change on its own. A dynamic list saves filters rather than addresses — each time it is used, it is recalculated from scratch, so it always reflects the current state of the subscriber database. In both cases, listed addresses are always excluded, even if the list still contains them. Lists can be opened, renamed, duplicated, exported to CSV, and deleted.

### Can I send a campaign only to customers who have already purchased something?

Language: en

Yes. In the Recipients tab, the address browser allows filtering by purchase history: minimum amount spent, minimum number of orders, purchase within the last N days, customers who purchased before but not within the last N days, purchase from a specific category, purchase of a specific product by ID, and no purchase of a specific product. You can save the selected addresses as a static list or save only the filters as a dynamic list, which you then select in step 3 of the wizard. The customer group filter applies only to registered customers — guests and addresses from import do not have a group.

### Will the shipment continue if I close the browser?

Language: en

Sending can be driven either by an open browser tab or by a cron job on the server. Starting from the panel requires leaving the tab open; a campaign scheduled for a specific date is sent only when cron is running. You will find the ready cron job URL with the secret key in the Settings tab — just add it to the server schedule, for example every 5 minutes. The same tab shows the date of the last cron run, and the sending screen warns you if cron has not checked in for over an hour. A campaign left in the middle of sending can also be taken over in a new browser tab.

### What happens when the mail server rejects the recipient's address?

Language: en

An address is not immediately considered failed — it returns to the queue and is retried, by default up to three attempts (setting 1–10). Until the attempts are exhausted, the address is counted as Retried; only then does it go to the Failed counter. The live sending console records a separate line for each attempt along with the full response from the mail server, and the queue table groups errors by response content and distinguishes temporary rejections (4xx codes, e.g. greylisting) from permanent ones (5xx codes, e.g. a non-existent address). Failed addresses can be exported to a CSV file.

### How can I test a campaign to make sure absolutely nothing gets sent to customers?

Language: en

There are two independent mechanisms. A test send sends one message to the specified address, in the selected language, and uses the template in its currently saved form. Trial mode (dry run), enabled in Settings, causes the engine to go through the entire queue and mark recipients as sent, but no message is passed to the mail server. When trial mode is enabled, the warning is visible both in Settings and on the sending screen — remember to disable it before a real campaign.

### What do the “Pre-shipment Inspections” check?

Language: en

These are eleven checks run before the campaign starts: the email sending method in PrestaShop, the correctness of the addresses in the envelope (BCC and Reply-To), the presence of recipients, frozen message content, the unsubscribe link in each language, the subject in each language, a sent test message, the sender address matching the store domain, SPF/DKIM/DMARC records, test mode, and one-click unsubscribe headers. Each row has one of three statuses: blocks sending, should be improved, or nothing to do. A blocking row is not a warning — the campaign will not start until it is resolved, and the refusal gives a specific reason. The remaining rows are recommendations despite which you can still send.

### Does the module help when newsletters end up in spam?

Language: en

Yes, to the extent that it can be verified from the store. The Settings tab contains sender domain diagnostics, which read MX, SPF, DKIM, and DMARC records — these are what receiving servers use to assess bulk sending. Pre-send checks additionally verify whether the sender address belongs to the store's domain, and whether each campaign language includes an unsubscribe link. Each message carries List-Unsubscribe and List-Unsubscribe-Post headers compliant with RFC 8058 (PrestaShop 1.7.5 and later), thanks to which Gmail and other providers display their own unsubscribe button. The module does not change anything in DNS — it only reads and reports.

### How does unsubscribing from the newsletter work and what does the module store about consents?

Language: en

Each message contains an individual unsubscribe link signed with the installation's secret key, working without login. Opening the link displays a confirmation page, and the unsubscribe takes place only after it is confirmed — thanks to this, email security scanners and link previews, which automatically open addresses from messages, do not unsubscribe anyone by accident. Unsubscribing simultaneously updates the customer's consent in PrestaShop, the entry in the guest subscriptions table, and the item on the imported list, while the address is added to the unsubscribe list shared across the entire installation. The Consents tab shows what proof of subscription the store actually has (subscription date and IP address), with export to CSV; an address without a recorded date is described as “no proof”, not as consent.

### What statistics does the module display?

Language: en

The Statistics tab shows for each campaign the status, number of recipients, sent, failed, opens, open rate, attributed revenue, and start and end dates. The dashboard adds a chart of sends and opens over time, subscriber base status, deliverability status, unsubscribes, and summaries of the latest and most effective campaigns, with a period selection: all time, 7, 30, or 90 days. Opens are measured by an invisible 1×1 pixel, which can be completely disabled — in that case, the pixel is not embedded at all, and the number of opens remains zero. Link clicks are recorded and used for revenue attribution: an order is linked to a campaign based on the last click within a 1–90 day window (7 by default), and the applied window is saved with each attributed order.

### Does the module support multistore and multiple languages?

Language: en

Yes. A campaign belongs to exactly one shop — its recipients, product prices, and the shop name and address in the content come from that shop, not from the current panel context. You set the message subject and content separately for each shop language, and in step 3 of the wizard you can limit sending to selected recipient languages. Two things are intentionally shared across the entire installation: the unsubscribe list and the imported list — opting out of receiving messages applies to the person and address, not to just one of the shops.

### Does the module slow down the store for customers?

Language: en

No. The module does not register any hook that displays content on the front end, so it does not add anything to the catalog, cart, or order pages. Its custom stylesheet is loaded exclusively on the listing page, which is a separate module page. The only operation performed outside the admin panel is saving the sales assignment when creating and changing the order status — executed in a block that catches all errors, so it cannot break order placement. During installation, the module also creates two auxiliary indexes on the customers and newsletter subscription tables so that recipient counting does not scan the entire tables.

### Which versions of PrestaShop and PHP is Easy Newsletter Pro compatible with?

Language: en

The module works with PrestaShop from version 1.7.0 up to the latest 9.x branch, and with PHP from 7.0 to 8.5, on MySQL 5.6+ or MariaDB 10.x+. It does not require Composer or any external PHP libraries. The TinyMCE 6.8.6 editor under the MIT license is bundled with the module, so the panel does not fetch anything from external CDN servers. The interface is fully translated into Polish, in a dual translation system supporting both classic dictionaries and the PrestaShop 1.7.8+ translation system.

### What happens to the data after uninstalling the module?

Language: en

Uninstallation removes the module's data: campaigns together with the frozen content of sent messages, the sending queue with information about each recipient, templates, the imported list, the unsubscribe register, opens, clicks, and revenue attribution. Reinstallation creates these tables again, but empty — therefore, before uninstalling, export what you want to keep, above all the imported list and the unsubscribe register. Customer accounts, their newsletter consent in PrestaShop, and the guest subscriptions table are not touched — the module reads them, but is never their owner. The installation secret key is also removed, so unsubscribe and browser preview links in messages that have already been sent stop working.


## Customer reviews

- Average rating: 5.00/5
- Public reviews: 1
- Source: iqitreviews
