> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wisepim.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Clean and structure what you imported

> Duplicate SKUs, MiXeD case, stray spaces and no categories at all. Clean the mess in the order that stops each fix from undoing the last one.

Part 2 got the products in; this part makes them usable. A freshly imported supplier catalog is typically the same five problems repeated a few thousand times: duplicate SKUs, trailing spaces nobody can see, `WIRELESS HEADPHONES` next to `wireless headphones`, prices with six decimals, and no category on anything. Each is a one-click fix. The order is what matters, because a cleanup run in the wrong sequence quietly undoes the one before it. Budget about 90 minutes for 5,000 products.

<Info>
  **Before you start:** you need products in the project, so run [part 2](/en/guides/first-catalog/import) first. Everything here happens on the Products page with [filtering](/en/products/filtering-products) and [bulk editing](/en/essentials/bulk-editing). Data already tidy? Skip to [part 4](/en/guides/first-catalog/enrich).
</Info>

<Tip>
  **What you'll get:** no accidental duplicate SKUs, consistent text and numbers across the catalog, products sitting in your own category tree, and flat variant rows collapsed into proper configurable products.
</Tip>

## Find the duplicates before you change anything

Every step below acts on a selection, so start by making the selection honest. Fixing text first and duplicates second means paying for the same fix twice, once on each copy of the product.

<img className="block dark:hidden" src="https://mintcdn.com/swiftsyncai/nChzZICOoKIdm0G4/images/marketing-screenshots/products/products-filters-presets-light-transparent.webp?fit=max&auto=format&n=nChzZICOoKIdm0G4&q=85&s=8318101f49fea7c156dd963dccb9a64c" alt="One-click data quality preset filters in WISEPIM" width="2252" height="1724" data-path="images/marketing-screenshots/products/products-filters-presets-light-transparent.webp" />

<img className="hidden dark:block" src="https://mintcdn.com/swiftsyncai/nChzZICOoKIdm0G4/images/marketing-screenshots/products/products-filters-presets-dark-transparent.webp?fit=max&auto=format&n=nChzZICOoKIdm0G4&q=85&s=94c631e68bb6046b3d6419a23cea3f85" alt="One-click data quality preset filters in WISEPIM" width="2252" height="1724" data-path="images/marketing-screenshots/products/products-filters-presets-dark-transparent.webp" />

<Steps>
  <Step title="Open the Presets tab for a damage report">
    On the Products page, click **Filters** next to the search bar and open the **Presets** tab. Each preset card shows how many products have that issue right now. Read the counts before touching anything, they are your to-do list for the rest of this guide.
  </Step>

  <Step title="Run the is-duplicate operator on SKU">
    Switch to **Advanced filters**, pick the SKU field with the **is duplicate** operator. This is the fastest way to surface repeated identifiers before they reach a channel.
  </Step>

  <Step title="Repeat it on EAN">
    The same operator works on EAN, which catches the duplicates that slipped through under different SKUs.
  </Step>

  <Step title="Review, then merge or delete">
    Look at the matches before acting; a repeated SKU is sometimes two genuinely different products from two suppliers. Save the filter as a set so you can re-run this check after every future import.
  </Step>
</Steps>

## Normalize the text, in this order

Run these three in sequence. Whitespace first because trimming spaces never changes meaning, and case before replacements because a Title Case pass run afterwards would re-capitalize the exact brand strings you just corrected. All four live in the bulk editing modal: click **Bulk Edit** with products selected, then search the action by name.

<img className="block dark:hidden" src="https://mintcdn.com/swiftsyncai/V6-UT40TpnIGGnaH/images/marketing-screenshots/products/products-bulk-edit-standardize-case-light-transparent.webp?fit=max&auto=format&n=V6-UT40TpnIGGnaH&q=85&s=8057241b26ac5450c83330a68d48feb6" alt="Bulk editing, Standardize Text Case across many products at once in WISEPIM" width="2252" height="2004" data-path="images/marketing-screenshots/products/products-bulk-edit-standardize-case-light-transparent.webp" />

<img className="hidden dark:block" src="https://mintcdn.com/swiftsyncai/V6-UT40TpnIGGnaH/images/marketing-screenshots/products/products-bulk-edit-standardize-case-dark-transparent.webp?fit=max&auto=format&n=V6-UT40TpnIGGnaH&q=85&s=801690e1f12698b3c3fd7313e56fecab" alt="Bulk editing, Standardize Text Case across many products at once in WISEPIM" width="2252" height="2004" data-path="images/marketing-screenshots/products/products-bulk-edit-standardize-case-dark-transparent.webp" />

<Steps>
  <Step title="Trim whitespace">
    [Trim Whitespace](/en/essentials/bulk-editing/trim-whitespace), under **Text & Content**, strips the leading, trailing, and duplicated spaces that break sorting, search, and feeds while staying invisible on screen. It is the safe first move.
  </Step>

  <Step title="Standardize case">
    [Standardize Text Case](/en/essentials/bulk-editing/standardize-case), also under **Text & Content**, puts names and other text fields into one consistent style. Check the live before-and-after preview before applying.
  </Step>

  <Step title="Fix terms with find and replace">
    [Find and Replace](/en/essentials/bulk-editing/find-replace) handles the leftovers: misspelled brand names, an old supplier's wording, stray HTML. Use whole-word matching so you do not hit substrings inside other words.
  </Step>

  <Step title="Clean the numbers">
    [Convert Numbers](/en/essentials/bulk-editing/convert-numbers), under **Attributes & Custom Fields**, rounds long decimals and rescales values, for example dividing weights by 1000 to go from grams to kilograms. A live preview shows the result on a sample value first.
  </Step>

  <Step title="Filter narrowly before each run">
    Every one of these acts on your current selection. Filter first, read the match count in the filter summary, then select, so a stray condition cannot take your whole catalog with it.
  </Step>
</Steps>

<img className="block dark:hidden" src="https://mintcdn.com/swiftsyncai/NhM3i9NQ8BTcB3kJ/images/marketing-screenshots/products/products-bulk-edit-find-replace-light-transparent.webp?fit=max&auto=format&n=NhM3i9NQ8BTcB3kJ&q=85&s=c66cd81b5c61fa3211bcce4ef97e847b" alt="Bulk editing, Find and Replace across many products at once in WISEPIM" width="2252" height="2004" data-path="images/marketing-screenshots/products/products-bulk-edit-find-replace-light-transparent.webp" />

<img className="hidden dark:block" src="https://mintcdn.com/swiftsyncai/NhM3i9NQ8BTcB3kJ/images/marketing-screenshots/products/products-bulk-edit-find-replace-dark-transparent.webp?fit=max&auto=format&n=NhM3i9NQ8BTcB3kJ&q=85&s=8f3697d7953c5d3598d96cd98321325e" alt="Bulk editing, Find and Replace across many products at once in WISEPIM" width="2252" height="2004" data-path="images/marketing-screenshots/products/products-bulk-edit-find-replace-dark-transparent.webp" />

## Give the catalog a structure

Structure comes last because it feeds on the work above: [AI Categorization](/en/ai/categorization) reads each product's content, so the tidier that content is, the better it places the product. Running it before the text cleanup means categorizing on the mess.

<img className="block dark:hidden" src="https://mintcdn.com/swiftsyncai/ZX2PMkwlzd0qyBuW/images/marketing-screenshots/products/products-enrich-categorization-light-transparent.webp?fit=max&auto=format&n=ZX2PMkwlzd0qyBuW&q=85&s=02b74107768619db1737cf46caa868f2" alt="AI Categorization settings in WISEPIM, confidence threshold and category count options" width="1478" height="854" data-path="images/marketing-screenshots/products/products-enrich-categorization-light-transparent.webp" />

<img className="hidden dark:block" src="https://mintcdn.com/swiftsyncai/ZX2PMkwlzd0qyBuW/images/marketing-screenshots/products/products-enrich-categorization-dark-transparent.webp?fit=max&auto=format&n=ZX2PMkwlzd0qyBuW&q=85&s=bb15a17d023454317d0ae4595d66dbdf" alt="AI Categorization settings in WISEPIM, confidence threshold and category count options" width="1478" height="854" data-path="images/marketing-screenshots/products/products-enrich-categorization-dark-transparent.webp" />

<Steps>
  <Step title="Run categorization at the default confidence">
    Select your products, click **Enrich with AI** in the toolbar, pick **AI Categorization**, and click **Start Enrichment**. It assigns products to your **existing** category tree and never invents categories, and the default 75% threshold gives you the confident assignments first.
  </Step>

  <Step title="Lower the threshold for a second pass">
    Filter to whatever is still uncategorized and run again at 60 to 65%. You keep the safe assignments from pass one and only review the genuinely ambiguous products.
  </Step>

  <Step title="Cap the category count if your merchandising needs it">
    Auto-assign lets the AI decide how many categories fit each product. Turn it off and set a maximum when your rules limit where a product may appear.
  </Step>

  <Step title="Collapse flat variant rows">
    If sizes and colours came in as separate products, select the ones that belong together and pick the [Group as Variants](/en/essentials/bulk-editing/group-as-variants) card under **Categories & Organization** in the bulk editing modal. It works on a page selection only, up to 500 products per run, and a toast reports how many were grouped and how many were skipped.
  </Step>

  <Step title="Assign product families">
    [Product families](/en/products/product-families) are templates per product type: assign one and the product inherits the attributes that type should have. Do it now, because that is what turns the missing-field reporting in part 4 into something meaningful rather than a list of fields nobody expected anyway.
  </Step>
</Steps>

<img className="block dark:hidden" src="https://mintcdn.com/swiftsyncai/JzN4ZaAJl8725TZC/images/marketing-screenshots/products/products-bulk-edit-group-as-variants-light-transparent.webp?fit=max&auto=format&n=JzN4ZaAJl8725TZC&q=85&s=86cbd30aace69a7ea1191a1ba71b9bd2" alt="Bulk editing, Group as Variants across many products at once in WISEPIM" width="2252" height="2004" data-path="images/marketing-screenshots/products/products-bulk-edit-group-as-variants-light-transparent.webp" />

<img className="hidden dark:block" src="https://mintcdn.com/swiftsyncai/JzN4ZaAJl8725TZC/images/marketing-screenshots/products/products-bulk-edit-group-as-variants-dark-transparent.webp?fit=max&auto=format&n=JzN4ZaAJl8725TZC&q=85&s=eb454791adf64ce39f55363062f66249" alt="Bulk editing, Group as Variants across many products at once in WISEPIM" width="2252" height="2004" data-path="images/marketing-screenshots/products/products-bulk-edit-group-as-variants-dark-transparent.webp" />

## How to tell it worked

| Signal                        | Where to look                                       | When it moves                                                                                              |
| ----------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Duplicate SKU and EAN matches | Advanced filters with the **is duplicate** operator | Re-run the saved filter set after each cleanup                                                             |
| Preset issue counts           | The **Presets** tab of the filter modal             | Each card shows a live count                                                                               |
| Uncategorized product count   | Filter for products with no category                | Drops sharply after the first pass at 75%                                                                  |
| Quality score and grade       | [Data Quality](/en/analytics/data-quality) overview | As data changes; force it with [Recalculate Data Quality](/en/essentials/bulk-editing/recalculate-quality) |

## When it doesn't work

<AccordionGroup>
  <Accordion icon="circle-alert" title="Thousands of products stayed uncategorized">
    The threshold is too high for this catalog, or your category names are ambiguous. Lower it to 60 to 65% and re-run on the remainder, and consider clarifying vague category names.
  </Accordion>

  <Accordion icon="circle-alert" title="Products landed in the wrong category">
    A misplacement usually traces back to thin product content, so the AI had little to work with. Enrich titles, descriptions, and attributes in [part 4](/en/guides/first-catalog/enrich), then categorize again.
  </Accordion>

  <Accordion icon="circle-alert" title="Group as Variants is unavailable">
    The action is deliberately blocked when you select all products across all pages, because grouping every filtered product under one parent is almost never intended. Select on a single page, in batches of up to 500.
  </Accordion>

  <Accordion icon="circle-alert" title="A find and replace hit more than I expected">
    Turn on **Match whole words only**, and narrow the target fields rather than replacing across everything. Filtering to a small selection and checking the result before scaling up is the cheap version of an undo.
  </Accordion>

  <Accordion icon="circle-alert" title="A filter suddenly matched my whole catalog">
    Check the match count in the filter summary before applying a bulk action. A broken filter now shows an error rather than quietly matching everything, but the count is still your safety check.
  </Accordion>
</AccordionGroup>

Clean, structured, and still half empty. [Part 4](/en/guides/first-catalog/enrich) fills the holes, and part 1's Knowledge Library is what decides how they sound.

## Related

<CardGroup cols={2}>
  <Card title="4. Enrich your catalog with AI" icon="wand-sparkles" href="/en/guides/first-catalog/enrich">
    Next in the series: fill the gaps without overwriting the data you just cleaned.
  </Card>

  <Card title="Clean up a catalog you inherited" icon="brush-cleaning" href="/en/guides/clean-up-an-inherited-catalog">
    The same cleanup with a measured baseline in front and a Quality Guard floor behind it.
  </Card>

  <Card title="Filtering & searching products" icon="search" href="/en/products/filtering-products">
    Presets, the is-duplicate operator, and saved filter sets.
  </Card>

  <Card title="Bulk editing" icon="layers" href="/en/essentials/bulk-editing">
    Every bulk action available, and what each one changes.
  </Card>
</CardGroup>
