# Global Keywords Database (SeedKeyword) - Import Guide ## Overview The Global Keywords Database stores canonical keyword suggestions that can be imported into account-specific keywords. These are organized by Industry and Sector. **Admin URL:** `https://api.igny8.com/admin/igny8_core_auth/seedkeyword/` --- ## Import Functionality ### CSV Format The import expects a CSV file with the following columns: | Column | Type | Required | Description | Example | |--------|------|----------|-------------|---------| | `keyword` | String | **Yes** | The keyword phrase | "best massage chairs" | | `industry` | String | **Yes** | Industry name (must exist) | "Health & Wellness" | | `sector` | String | **Yes** | Sector name (must exist) | "Massage Products" | | `volume` | Integer | No | Monthly search volume | 5400 | | `difficulty` | Integer | No | Keyword difficulty (0-100) | 45 | | `country` | String | No | Country code (US, CA, GB, etc.) | "US" | | `is_active` | Boolean | No | Active status | True | ### Sample CSV ```csv keyword,industry,sector,volume,difficulty,country,is_active best massage chairs,Health & Wellness,Massage Products,5400,45,US,True deep tissue massage chair,Health & Wellness,Massage Products,720,52,US,True shiatsu massage chair,Health & Wellness,Massage Products,1200,48,US,True ``` **Template file available:** `/data/app/igny8/backend/seed_keywords_import_template.csv` --- ## How to Import ### Step 1: Prepare Your CSV File 1. Download the template: `seed_keywords_import_template.csv` 2. Add your keywords (one per row) 3. Ensure Industry and Sector names **exactly match** existing records 4. Save as CSV (UTF-8 encoding) ### Step 2: Import via Django Admin 1. Go to: `https://api.igny8.com/admin/igny8_core_auth/seedkeyword/` 2. Click **"Import"** button (top right) 3. Click **"Choose File"** and select your CSV 4. Click **"Submit"** 5. Review the preview: - ✅ Green = New records to be created - 🔵 Blue = Existing records to be updated - ❌ Red = Errors (fix and re-import) 6. If preview looks good, click **"Confirm import"** ### Step 3: Verify Import - Check the list to see your imported keywords - Use filters to find specific industries/sectors - Edit any records if needed --- ## Data Validation The import process automatically: ✅ **Validates volume:** Ensures it's a positive integer (defaults to 0 if invalid) ✅ **Validates difficulty:** Clamps to 0-100 range ✅ **Validates country:** Must be one of: US, CA, GB, AE, AU, IN, PK (defaults to US) ✅ **Handles duplicates:** Uses `(keyword, industry, sector)` as unique key ✅ **Skip unchanged:** If keyword already exists with same data, it's skipped --- ## Bulk Delete ### How to Delete Keywords 1. Select keywords using checkboxes (or "Select all") 2. Choose **"Delete selected keywords"** from the action dropdown 3. Click **"Go"** 4. Review the confirmation page showing all related objects 5. Click **"Yes, I'm sure"** to confirm deletion **Note:** Only superusers and developers can delete seed keywords. --- ## Export Functionality ### Export to CSV/Excel 1. Go to: `https://api.igny8.com/admin/igny8_core_auth/seedkeyword/` 2. (Optional) Use filters to narrow down results 3. Click **"Export"** button (top right) 4. Choose format: CSV, Excel, JSON, etc. 5. File downloads with all selected fields **Export includes:** - All keyword data - Related industry/sector names - SEO metrics (volume, difficulty) - Metadata (created date, active status) --- ## Common Issues & Solutions ### Issue: "Industry not found" error during import **Solution:** - Ensure the industry name in your CSV **exactly matches** an existing Industry record - Check spelling, capitalization, and spacing - View existing industries: `/admin/igny8_core_auth/industry/` ### Issue: "Sector not found" error during import **Solution:** - Ensure the sector name in your CSV **exactly matches** an existing IndustrySector record - The sector must belong to the specified industry - View existing sectors: `/admin/igny8_core_auth/industrysector/` ### Issue: Import shows errors for all rows **Solution:** - Check CSV encoding (must be UTF-8) - Ensure column headers match exactly: `keyword,industry,sector,volume,difficulty,country,is_active` - Remove any extra columns or spaces in headers - Verify there are no special characters causing parsing issues ### Issue: Duplicate keyword error **Solution:** - Keywords are unique per `(keyword, industry, sector)` combination - If importing a keyword that already exists, it will be updated (not duplicated) - Use `skip_unchanged = True` to avoid unnecessary updates ### Issue: Delete confirmation page has no "Delete" button **Solution:** ✅ **FIXED** - Custom bulk delete action now includes proper delete button on confirmation page --- ## Permissions | Action | Permission Required | |--------|-------------------| | View | Staff users | | Add | Superuser | | Edit | Superuser | | Delete | Superuser or Developer | | Import | Superuser | | Export | Staff users | --- ## Technical Details ### Model Location - **Model:** `backend/igny8_core/auth/models.py` - `SeedKeyword` - **Admin:** `backend/igny8_core/auth/admin.py` - `SeedKeywordAdmin` - **Resource:** `backend/igny8_core/auth/admin.py` - `SeedKeywordResource` ### Database Table - **Table name:** `igny8_seed_keywords` - **Unique constraint:** `(keyword, industry, sector)` - **Indexes:** - `keyword` - `industry, sector` - `industry, sector, is_active` - `country` ### API Access (Read-Only) - **Endpoint:** `/api/v1/auth/seed-keywords/` - **ViewSet:** `SeedKeywordViewSet` (ReadOnlyModelViewSet) - **Filters:** industry, sector, country, is_active --- ## Related Documentation - [Django Admin Guide](../../docs/90-REFERENCE/DJANGO-ADMIN-ACCESS-GUIDE.md) - [Models Reference](../../docs/90-REFERENCE/MODELS.md) - [Planner Module](../../docs/10-MODULES/PLANNER.md) --- **Last Updated:** January 11, 2026 **Maintainer:** IGNY8 Team