# Тексты объявлений для Авито через API

> Заголовок и описание для каждого товара или услуги из вашей таблицы. Тексты уходят в файл автозагрузки, Авито создаёт объявления сам. Дефекты б/у вещей модель называет прямо, условий, которых нет в данных, не придумывает.

- 1 000 объявлений — от 57,84 ₽, оценка по ценам каталога
- Заголовок до 50 символов
- Дефекты б/у — прямо
- Файл для автозагрузки

## Объявление · Казань

**iPhone 13 128 ГБ, аккумулятор 84%**

> 38 000 ₽
>
> iPhone 13 на 128 ГБ, пользовались два года. Телефон подойдёт тем, кто ищет устройство без ремонтов и с полным комплектом.
> — Модель: iPhone 13, 128 ГБ
> — Срок использования: 2 года
> — Аккумулятор: 84%
> — Корпус: без сколов
> — Экран: на защитном стекле есть трещина, сам экран целый
> — Ремонты: не ремонтировался
> — Комплектация: полный комплект с коробкой
> Цена: 38 000 ₽.
> Город: Казань.
> Напишите в сообщения на Авито, если появятся вопросы.

Реальный текст из теста. [Как тестировали](#test)

## Задача

У магазина на Авито 300 товаров, у сервиса — 40 услуг в трёх городах, у агентства — десяток клиентов с автозагрузкой. Тексты пишутся вручную или копируются из карточек поставщика. В итоге в одних объявлениях нет половины характеристик, в других — одинаковые тексты на десятки позиций.

Через API таблица с фактами превращается в заголовки и описания одной командой. Для второго города модель пишет другой текст с теми же фактами.

## Для кого

Для всех, у кого объявлений больше, чем хочется писать руками.

- **Магазин на Авито.** Новые товары из каталога: характеристики есть, текстов нет. Одна строка таблицы — одно объявление. Из той же таблицы — [описания для сайта](https://polza.ai/use-cases/seo-content). Сотни объявлений за минуту.
- **Мастера и сервисы.** Ремонт, уборка, грузоперевозки, репетиторы. Условия работы, стаж и цена — в данных, текст — от модели. Отдельный текст на каждую услугу.
- **Агентства с автозагрузкой.** Десятки клиентов, разные города, общий процесс: таблица — скрипт — файл автозагрузки. Один ключ на всех клиентов.
- **Перепродажа б/у.** Состояние и дефекты из таблицы приёмки. Модель называет их прямо, без «в отличном состоянии». Меньше споров с покупателями.

## Как текст попадает на Авито

Четыре шага. Модель пишет тексты, а размещает их автозагрузка Авито — без ручного копирования.

- **Шаг 1. Таблица.** Товары или услуги с фактами и ценой: выгрузка из учётной системы или Google-таблица. (id, name, facts, price, city)
- **Шаг 2. Скрипт и Polza.** Скрипт отправляет каждую строку модели и получает заголовок и описание в JSON. (python write_ads.py)
- **Шаг 3. Файл автозагрузки.** Тексты ложатся в поля `Title` и `Description` файла, который Авито забирает по ссылке. (feed.xml)
- **Шаг 4. Объявления.** Автозагрузка создаёт и обновляет объявления. Изменили текст в файле — объявление обновится при следующей загрузке. (30 объявлений · 3 категории · 3 города)

### Тексты в файле автозагрузки

Скрипт кладёт заголовок в `Title`, описание — в `Description` внутри CDATA, чтобы переносы строк и тире дошли до объявления как есть. Цена, адрес, категория и фото берутся из вашей таблицы. Обязательные поля и лимиты зависят от категории — сверяйте файл с [форматом автозагрузки Авито](https://autoload.avito.ru/format/).

feed.xml · упрощённо:

```
<Ads formatVersion="3" target="Avito.ru">
  <Ad>
    <Id>B03</Id>
    <Title>iPhone 13 128 ГБ, аккумулятор 84%</Title>
    <Description><![CDATA[iPhone 13 на 128 ГБ, пользовались два года. Телефон подойдёт…]]></Description>
    <Price>38000</Price>
    <Address>Казань</Address>
    <!-- категория, фото и поля категории — из вашего каталога -->
  </Ad>
</Ads>
```

## Как это выглядит в объявлении

Реальные тексты из теста. Модель пишет описание строками с тире — так его проще читать с экрана.

### Объявление · Екатеринбург

**Ремонт холодильников на дому, выезд в день обращения**

> от 1 500 ₽
>
> Частный мастер с опытом 12 лет выполняет ремонт холодильников на дому в Екатеринбурге. Выезд по городу в день обращения, запчасти привожу с собой.
> — Выезд и диагностика — 500 ₽, при ремонте диагностика бесплатно.
> — Гарантия на работу — 6 месяцев.
> — Стоимость ремонта — от 1500 ₽.
> — Работаю по Екатеринбургу, выезд в день обращения.
>
> Пишите в сообщения на Авито, чтобы вызвать мастера.

Услуга: условия и цена из данных

### Поиск · «лампа настольная»

> Настольная лампа Lumo Q с Qi-зарядкой — 3 290 ₽
> Монитор-лампа Lumo Bar 5 Вт с пультом — 2 790 ₽
> Лампа для рисования Lumo Draw, 14 Вт, CRI 95 — 5 490 ₽
> Термокружка Arctic 470 мл сталь 18/8 — 1 490 ₽

В выдаче — заголовок и цена

### Объявление · Москва

**Настольная лампа Lumo Q с Qi-зарядкой**

> 3 290 ₽
>
> Настольная лампа Lumo Q на гибкой стойке. В корпус встроена площадка для беспроводной зарядки смартфонов — разместите телефон на основании, и он начнёт заряжаться без подключения кабеля. Подойдёт для рабочего места или прикроватного столика.
> — Мощность лампы: 12 Вт
> — Беспроводная зарядка Qi: 10 Вт
> — Цветовая температура: регулируется от 3000 до 6000 K
> — Таймер отключения: 30 минут
> — Стойка: гибкая
> — Состояние: новая
> Цена: 3290 ₽
> Город: Москва
> Заинтересовала лампа — пишите в сообщения на Авито.

Новый товар: характеристики строками

## Сколько стоят 1 000 объявлений

Замер — фактический расход по полю `cost_rub` на 8 одинаковых объявлениях, пересчитанный на 1 000; у DeepSeek — среднее по трём прогонам. Рассуждение отключено у всех моделей. Стоимость «сейчас» Polza.ai оценивает по текущим ценам [каталога](https://polza.ai/models).

| Модель | 1 000 объявлений, замер 6 октября | Ответ | Знаков в описании | 1 000 объявлений, оценка сейчас |
| --- | --- | --- | --- | --- |
| [GPT-5 Mini](https://polza.ai/models/openai/gpt-5-mini.md) | 54 ₽ | 7,1 с | 364 | 57,84 ₽ |
| [Gemini 2.5 Flash](https://polza.ai/models/google/gemini-2.5-flash.md) | 63 ₽ | 3,0 с | 370 | 71,78 ₽ |
| [DeepSeek V4 Pro](https://polza.ai/models/deepseek/deepseek-v4-pro.md) | 10 ₽ | 6,2 с | 305 | 170 ₽ |
| [Grok 4.3](https://polza.ai/models/x-ai/grok-4.3.md) | 118 ₽ | 2,2 с | 233 | 222 ₽ |
| [Claude Sonnet 5](https://polza.ai/models/anthropic/claude-sonnet-5.md) | 440 ₽ | 4,7 с | 336 | 641 ₽ |

Замер — 6 октября 2026, по ценам того дня.

«Оценка сейчас» — по текущим ценам каталога для объёмов, которые оценила редакция, а не замерил тест: 700 токенов на входе (промпт и факты) и 400 на выходе (заголовок и описание в JSON) на одно объявление.

В основном прогоне DeepSeek V4 Pro 30 объявлений стоили 0,35 ₽ по ценам 6 октября. Как отключить рассуждение и закрепить провайдера — в сценарии про SEO-тексты: [как не переплатить за рассуждение и провайдера](https://polza.ai/use-cases/seo-content#stoimost).

## Готовый скрипт на Python

Читает таблицу, пишет объявления параллельно, повторяет запросы при ошибках и печатает расход. С аргументом-городом пишет второй вариант текста для другого города. Нужен пакет `openai` и ключ в `POLZA_API_KEY`.

### Вход: ads.csv

Тип, название, факты через точку с запятой, цена и город. Для б/у в фактах — срок использования и дефекты.

ads.csv:

```
id,type,name,facts,price,city
B03,б/у,"iPhone 13, 128 ГБ","б/у 2 года; аккумулятор 84%; без сколов; трещина на защитном стекле, экран целый; полный комплект с коробкой; не ремонтировался",38000,Казань
S01,услуга,Ремонт холодильников на дому,"частный мастер; стаж 12 лет; выезд по городу в день обращения; диагностика 500 ₽, бесплатно при ремонте; гарантия на работу 6 месяцев; запчасти привожу с собой",от 1500,Екатеринбург
```

### Выход: ads.jsonl

Заголовок и описание по схеме. Реальный ответ из теста.

ads.jsonl · одна строка:

```
{
  "id": "S01",
  "title": "Ремонт холодильников на дому, выезд в день обращения",
  "description": "Частный мастер с опытом 12 лет выполняет ремонт холодильников на дому в Екатеринбурге. Выезд по городу в день обращения, запчасти привожу с собой.\n— Выезд и диагностика — 500 ₽, при ремонте диагностика бесплатно.\n— Гарантия на работу — 6 месяцев.\n— Стоимость ремонта — от 1500 ₽.\n— Работаю по Екатеринбургу, выезд в день обращения.\n\nПишите в сообщения на Авито, чтобы вызвать мастера."
}
```

Python · write_ads.py:

```
# write_ads.py — тексты объявлений для Авито из CSV через Polza
import asyncio, csv, json, os, sys
from openai import AsyncOpenAI, APIStatusError

MODEL = "deepseek/deepseek-v4-pro"
PROVIDER = "streamlake/fp8"  # самый дешёвый провайдер модели: top_provider.name в каталоге
CONCURRENCY = 10

ai = AsyncOpenAI(base_url="https://polza.ai/api/v1", api_key=os.environ["POLZA_API_KEY"])
SYSTEM = open("prompt.txt", encoding="utf-8").read()

SCHEMA = {
    "name": "avito_ad",
    "strict": True,
    "schema": {
        "type": "object",
        "properties": {"title": {"type": "string"}, "description": {"type": "string"}},
        "required": ["title", "description"],
        "additionalProperties": False,
    },
}

async def write(row, sem, stats, city=None):
    prompt = (f"Тип: {row['type']}\nНазвание: {row['name']}\nФакты: {row['facts']}\n"
              f"Цена: {row['price']} ₽\nГород: {city or row['city']}")
    if city:  # второе объявление того же товара в другом городе
        prompt += "\nЭто второе объявление того же товара в другом городе: напиши его другими словами, факты те же."
    async with sem:
        for attempt in range(5):
            try:
                r = await ai.chat.completions.create(
                    model=MODEL,
                    messages=[{"role": "system", "content": SYSTEM},
                              {"role": "user", "content": prompt}],
                    response_format={"type": "json_schema", "json_schema": SCHEMA},
                    extra_body={"reasoning": {"effort": "none"},
                                "provider": {"only": [PROVIDER], "allow_fallbacks": False}},
                )
                break
            except APIStatusError as e:
                if e.status_code in (429, 500, 502, 503) and attempt < 4:
                    await asyncio.sleep(2 ** attempt)
                    continue
                raise
    stats["rub"] += r.usage.model_extra.get("cost_rub", 0)
    return {"id": row["id"], "city": city or row["city"], **json.loads(r.choices[0].message.content)}

async def main():
    # python write_ads.py [город для второго варианта]
    second_city = sys.argv[1] if len(sys.argv) > 1 else None
    rows = list(csv.DictReader(open("ads.csv", encoding="utf-8")))
    sem, stats = asyncio.Semaphore(CONCURRENCY), {"rub": 0}
    results = await asyncio.gather(*(write(r, sem, stats, second_city) for r in rows), return_exceptions=True)
    name = "ads_variant.jsonl" if second_city else "ads.jsonl"
    ok = 0
    with open(name, "w", encoding="utf-8") as out, open("errors.txt", "w", encoding="utf-8") as err:
        for row, res in zip(rows, results):
            if isinstance(res, Exception):
                err.write(f"{row['id']}\t{res}\n")
            else:
                out.write(json.dumps(res, ensure_ascii=False) + "\n")
                ok += 1
    print(f"Готово {ok} из {len(rows)}, расход {stats['rub']:.2f} ₽")

asyncio.run(main())
```

## Промпт для объявлений

Промпт задаёт структуру описания: кому подойдёт, факты строками, условия, призыв написать. Так все объявления выглядят одинаково аккуратно, а покупатель находит нужное за секунды.

Вторая версия добавляет три запрета по итогам первого прогона: условия сделки только из данных, без оценок состояния, без обещаний про чужие правила. Модель дописывала «самовывоз», «в хорошем состоянии» у телефона с трещиной и «подходит под нормы большинства авиакомпаний».

prompt.txt:

```
Ты пишешь объявления для Авито.

Заголовок:
- до 50 символов: что это и главный параметр;
- без капслока, эмодзи и слов «срочно», «лучший»,
  «идеальный».

Описание — от 400 до 1000 символов:
1. Первый абзац: что это и кому подойдёт.
2. Характеристики или состояние — строками, каждая
   начинается с «— ».
3. Условия: цена, город, самовывоз или выезд —
   только если они есть в данных.
4. Последняя строка — предложение написать в
   сообщения на Авито.

Правила:
- Только факты из данных. Не придумывай гарантию,
  доставку, скидки, торг, сроки, комплектацию и
  причины продажи.
- Для б/у вещей перечисли все дефекты из данных
  прямо, не смягчай и не пропускай.
- Самовывоз, доставку, встречу, торг и обмен
  упоминай, только если они есть в данных.
- Не оценивай состояние словами «хорошее»,
  «отличное», «как новый», «надёжный» и не пиши «всё
  работает», если этого нет в данных — только факты.
- Не обещай, что товар подходит под чужие правила и
  нормы, если этого нет в данных.
- Не указывай телефоны, ссылки, мессенджеры и адреса
  сайтов.
- Без восклицательных знаков, капслока и слов
  «уникальный», «идеальный», «лучший»,
  «качественный».

Верни JSON: title — заголовок, description —
описание.
```

## Проверка перед загрузкой

Пять проверок кодом. Они дешевле модели-проверки и ловят то, что промпт не удержал.

- **Заголовок до 50 символов.** Такой лимит задаёт промпт: короткий заголовок целиком виден в выдаче. В тесте модель превысила его в 1 объявлении из 30 — такие перегенерируйте.
- **Условия, которых нет в данных.** Ищите в описании «самовывоз», «доставка», «торг», «обмен» и сверяйте с фактами. В тесте так нашлись 8 лишних условий в первом прогоне и 2 во втором.
- **Нет контактов и ссылок.** Телефоны, ссылки и мессенджеры в описании модель не писала ни разу, но проверка стоит одну строку кода.
- **Структура на месте.** Строки с тире и призыв написать в сообщения. В одном из трёх прогонов на 8 объявлениях DeepSeek потеряла список в 6 текстах — проверка отправит их на повтор.
- **Дефекты б/у названы.** Каждое слово из дефектов в фактах — «трещина», «пятно», «шум» — должно быть в описании. В тесте модель назвала все дефекты во всех 7 объявлениях с ними.
- **Тексты не повторяются.** Для второго города модель писала другой текст: совпадение с первым вариантом — от 30 до 65% по символам. Выше 70% — перегенерируйте.

## Через Claude, OpenAI и Grok — или без кода

Скрипт и файл автозагрузки соберёт ИИ-агент. Модели для текстов — в том же каталоге Polza.ai.

- **Claude Code и Claude Desktop.** Положите таблицу и промпт в папку и отдайте Claude задание ниже: агент напишет тексты и соберёт `feed.xml`. Claude Sonnet 5: 1 000 объявлений — 641 ₽, оценка по ценам каталога.
- **Codex и ChatGPT Desktop.** То же задание выполняет Codex CLI. Модели GPT подключаются тем же ключом Polza. GPT-5 Mini: 1 000 объявлений — 57,84 ₽, оценка по ценам каталога.
- **Grok.** Модели xAI в том же API: `MODEL = "x-ai/grok-4.3"` в скрипте. Grok 4.3: 1 000 объявлений — 222 ₽, оценка по ценам каталога.

### Задание для агента

Подходит для Claude Code, Codex и других агентов из [интеграций](https://polza.ai/integrations). Агент покажет первые 20 объявлений до полного прогона.

задание для Claude Code или Codex:

```
В папке лежат ads.csv и prompt.txt.
Напиши и запусти скрипт на Python:
для каждой строки запрос к https://polza.ai/api/v1
через OpenAI SDK, ключ — в переменной POLZA_API_KEY,
модель deepseek/deepseek-v4-pro без рассуждений
(reasoning: {effort: none}), провайдер streamlake/fp8,
системный промпт — prompt.txt,
ответ — JSON с полями title, description.
Потом собери из ответов файл автозагрузки feed.xml:
Title, Description в CDATA, Price, Address из таблицы.
Сначала 20 строк и покажи их, после моего «ок» — все.
```

### Без кода: n8n и Dify

Google-таблица с товарами, нода OpenAI Chat Model с адресом `https://polza.ai/api/v1`, тексты — обратно в таблицу. Файл автозагрузки собирается из неё так же, как в скрипте.

- **n8n.** Новые строки в таблице — новые тексты к утру. Нода OpenAI Chat Model с адресом Polza.
- **Dify.** Workflow: текст объявления и проверка, запуск пачкой. Облако или self-hosted.

## Тест редакции: 30 объявлений

10 новых товаров магазина, 10 б/у вещей частника и 10 услуг в трёх городах. Данные вымышленные, в 7 б/у вещах — реальные по смыслу дефекты: трещина, пятно, шум при отжиме. Редактор прочитал каждое объявление. Замер 6 октября 2026: весь тест, включая сравнение пяти моделей, стоил 6,5 ₽ по ценам того дня.

- Объявлений: 30
- Время: 39 с
- Расход: 0,35 ₽
- Без выдумок: 26 из 30

### Два прогона DeepSeek V4 Pro

| Прогон | Расход | Время | Заголовок до 50 | Лишние условия | Объявления с выдумкой | Дефекты б/у названы |
| --- | --- | --- | --- | --- | --- | --- |
| v1: базовый промпт | 0,35 ₽ | 28 с | 29 из 30 | 8 | 11 | 7 из 7 |
| v2: запрет условий и оценок | 0,35 ₽ | 39 с | 29 из 30 | 2 | 4 | 7 из 7 |

Лишние условия — самовывоз, доставка, торг, обмен, которых нет в фактах; ищутся кодом. Выдумки — по вычитке редактора. Телефонов, ссылок, капслока и восклицательных знаков не было ни в одном объявлении. Расход — по ценам 6 октября 2026.

### Второй вариант для другого города

Для 10 товаров мы попросили второй текст для Санкт-Петербурга с теми же фактами. Это стоило 0,12 ₽ по ценам 6 октября. Совпадение с первым вариантом — от 30 до 65% по символам, заголовки разные во всех 10.

### Москва

**Монитор-лампа Lumo Bar 5 Вт с пультом**

> Монитор-лампа Lumo Bar — накладной светильник на монитор. Подойдёт тем, кто работает или играет за экраном и хочет добавить локальное освещение рабочей зоны без бликов.
> Характеристики и комплектация:
> — новая
> — мощность: 5 Вт
> — крепление на монитор толщиной 0,5–3 см
> — асимметричный свет без бликов на экране
> — пульт управления в комплекте
> — питание от USB
> Цена: 2790 ₽
> Город: Москва
> По всем вопросам пишите в сообщения на Авито.

Первый вариант

### Санкт-Петербург

**LED-лампа Lumo Bar на монитор, 5 Вт**

> Настольная LED-лампа с креплением на верхний край монитора. Подойдёт тем, кто хочет дополнительно подсветить рабочую зону, не занимая место на столе.
> — Тип: монитор-лампа
> — Состояние: новая
> — Мощность: 5 Вт
> — Крепление: на монитор толщиной от 0,5 до 3 см
> — Особенность: асимметричный свет для отсутствия бликов на экране
> — Управление: пульт
> — Питание: USB
> Цена: 2790 ₽
> Город: Санкт-Петербург
> По всем вопросам пишите в сообщения на Авито.

Второй вариант с теми же фактами

### Пять моделей на 8 трудных объявлениях

| Модель | 1 000 объявлений, замер | Структура | Лишние условия | Что увидел редактор |
| --- | --- | --- | --- | --- |
| DeepSeek V4 Pro * | 10 ₽ | 18 из 24 | 1 | В двух прогонах из трёх — полная структура, в одном потеряла список и призыв. |
| GPT-5 Mini | 54 ₽ | 8 из 8 | 1 | Аккуратно, каждая строка «параметр: значение». Один раз дописала «самовывоз: да». |
| Gemini 2.5 Flash | 63 ₽ | 8 из 8 | 0 | Структура на месте, но добавляет общие слова: «поддерживает современные приложения». |
| Grok 4.3 | 118 ₽ | 8 из 8 | 2 | Самая быстрая и короткая. Дважды дописала «самовывоз». |
| Claude Sonnet 5 | 440 ₽ | 8 из 8 | 0 | Полно и без выдумок, структура во всех 8. |

Трудные — те, где модель ошибалась в первом прогоне: б/у с дефектами, услуги с условиями, товар с «нормами авиакомпаний». Промпт v2. * DeepSeek прогнали трижды после сбоя в первом прогоне, в таблице — сумма и среднее по трём. Стоимость — замер 6 октября 2026 по ценам того дня, текущая — в [разделе «Стоимость»](#stoimost).

**Вывод.** Для каталога в сотни позиций — DeepSeek V4 Pro и пять проверок кодом: 26 из 30 объявлений без выдумок, по оценке на текущих ценах каталога 1 000 объявлений — 170 ₽. Если нужен ровный результат без повторов — Claude Sonnet 5 или GPT-5 Mini. Дефекты б/у все модели называли прямо — это заслуга данных: что записано в таблице приёмки, то и попадёт в объявление.

## Вопросы

### Можно ли загружать тексты на Авито без проверки?

После пяти проверок кодом — да, кроме объявлений, которые проверка отправила на повтор. Первые 20–30 объявлений прочитайте целиком: так вы увидите, что нужно добавить в промпт.

### Как сделать разные тексты для разных городов?

Запустите скрипт второй раз с названием города. Модель пишет другими словами с теми же фактами: в тесте совпадение с первым вариантом было 30–65%.

### Сколько объявлений можно сделать за час?

В тесте 30 объявлений заняли 39 секунд при 10 параллельных запросах — около 2 800 в час.

### Модель напишет, что вещь в хорошем состоянии?

Промпт запрещает оценки состояния. В объявление попадают только факты из таблицы: срок использования и дефекты. В первом прогоне модель один раз написала «в хорошем состоянии» про телефон с трещиной на стекле, во втором — ни разу.

### Нужно ли знать формат автозагрузки?

Скрипт возвращает тексты, а файл автозагрузки собирается из них и вашей таблицы. Агент вроде Claude Code соберёт его по заданию со страницы; обязательные поля категории сверьте со спецификацией автозагрузки Авито.

### Можно ли платить юрлицом?

Да. Polza.ai работает по договору: счёт, УПД и НДС. Расход виден в кабинете по ключам и моделям.

## Ссылки

- Сценарий «SEO-тексты»: https://polza.ai/use-cases/seo-content.md
- Сценарий «Ответы на отзывы»: https://polza.ai/use-cases/otvety-na-otzyvy.md
- Сценарий «Тесты по урокам»: https://polza.ai/use-cases/testy-po-urokam.md
- Сценарий «Письма клиентам»: https://polza.ai/use-cases/pisma-klientam.md
- Сценарий «Протоколы встреч»: https://polza.ai/use-cases/protokoly-vstrech.md
- Документация: https://polza.ai/docs
- Каталог моделей: https://polza.ai/models/llms.txt
- Страница: https://polza.ai/use-cases/obyavleniya-avito
- Обновлено: 2026-10-14; замер теста — 6 октября 2026
