# Apify Store README Optimizer (`trovevault/apify-store-readme-optimizer`) Actor

Fetches public Apify Store Actor READMEs and generates cleaner, review-ready optimization drafts with stronger structure, use cases, examples, troubleshooting, and API-safe snippets.

- **URL**: https://apify.com/trovevault/apify-store-readme-optimizer.md
- **Developed by:** [Trove Vault](https://apify.com/trovevault) (community)
- **Categories:** AI, Agents, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 readmes

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Apify Store README Optimizer

Generate review-ready README drafts for public Apify Store Actors without publishing or modifying the source Actor. Use the deterministic optimizer for fast, free drafts, or optionally add your own LLM API key for a second editorial rewrite pass.

Enter one or more Actor identifiers, such as `trovevault/shopify-products-scraper`, `trovevault~seo-fields-scraper`, a Store URL, or a public Actor ID. The actor fetches the public Markdown version of the Store page, extracts the real README body, removes platform boilerplate, and writes an optimized draft to the dataset and key-value store.

#### Best for

- Auditing and improving Apify Store READMEs before launch.
- Creating shorter drafts under a fixed character budget.
- Adding clearer purpose, use cases, feature transparency, examples, limitations, troubleshooting, and support language.
- Reviewing drafts manually before copying them back into a source repository or Store listing.

#### Not designed for

- Publishing changes to Apify Store automatically.
- Editing the source Actor repository.
- Replacing manual review for high-value public listings.
- Producing fully bespoke brand copy without human approval.

#### How it works

1. Resolves each Actor input to a public Store slug.
2. Downloads `https://apify.com/<username>/<actor-name>.md`.
3. Extracts the real README section and skips generated schema/API boilerplate.
4. Rebuilds the README with a cleaner deterministic structure:
   - purpose-focused introduction
   - `Best for`
   - `Not designed for`
   - output/input/API examples where present
   - limitations
   - troubleshooting
   - support path
5. If an LLM provider and API key are provided, sends the original README and deterministic draft to that provider for a final rewrite.
6. Saves the optimized Markdown to the default dataset and, optionally, the key-value store.

#### Input example

```json
{
  "actorIds": [
    "trovevault/shopify-products-scraper",
    "https://apify.com/trovevault/seo-fields-scraper"
  ],
  "maxCharacters": 9900,
  "llmProvider": "none",
  "llmApiKey": "",
  "llmModel": "",
  "llmTemperature": 0.2,
  "llmInstructions": "",
  "includeOriginalReadme": false,
  "saveMarkdownFiles": true
}
````

#### LLM mode example

```json
{
  "actorIds": ["trovevault/shopify-products-scraper"],
  "maxCharacters": 9900,
  "llmProvider": "openai",
  "llmApiKey": "YOUR_OPENAI_API_KEY",
  "llmModel": "gpt-4o-mini",
  "llmTemperature": 0.2,
  "llmInstructions": "Keep the tone direct and practical. Preserve all public output fields. Avoid hype."
}
```

#### Input reference

| Field | Type | Description |
|---|---|---|
| `actorIds` | array | Public Actor identifiers in `username/name`, `username~name`, Store URL, or public Actor ID format. |
| `maxCharacters` | integer | Character budget for each optimized README. Defaults to `9900`. |
| `llmProvider` | string | Optional provider: `none`, `openai`, `anthropic`, or `openrouter`. |
| `llmApiKey` | string | API key for the selected provider. It is used only for the LLM request and is not saved to output. |
| `llmModel` | string | Optional model override. Defaults are provider-specific. |
| `llmTemperature` | number | Creativity level for the optional LLM rewrite. |
| `llmInstructions` | string | Extra style or business instructions for the LLM rewrite. |
| `includeOriginalReadme` | boolean | Include the original README body in the dataset item. |
| `saveMarkdownFiles` | boolean | Save original and optimized Markdown files to the key-value store. |

#### API usage

Run the actor from a script or pipeline with the Apify API. The result dataset will contain one row per optimized Actor README.

```bash
curl -X POST "https://api.apify.com/v2/acts/trovevault~apify-store-readme-optimizer/runs" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "actorIds": ["trovevault/shopify-products-scraper"],
    "maxCharacters": 9900,
    "llmProvider": "none",
    "saveMarkdownFiles": true
  }'
```

When using LLM mode through the API, send `llmApiKey` in the request body. It is used only for the provider request and is not saved in the output dataset or key-value store.

#### Output

Each dataset item contains:

| Field | Description |
|---|---|
| `actorId` | Resolved Store slug, such as `trovevault/shopify-products-scraper`. |
| `readmeUrl` | Public Markdown URL used as the source. |
| `originalCharacters` | Character count of the extracted source README. |
| `optimizedCharacters` | Character count of the generated draft. |
| `optimizationMode` | `deterministic` or `llm`. |
| `llmProvider` | Provider used for the optional LLM rewrite, if any. |
| `llmModel` | Model used for the optional LLM rewrite, if any. |
| `optimizedReadme` | Full optimized Markdown draft. |
| `warnings` | Review notes such as missing snippets or over-budget output. |
| `optimizedKey` | Key-value store key for the optimized Markdown file. |
| `originalKey` | Key-value store key for the original extracted Markdown file. |

#### Limitations

The deterministic mode is fast, cheap, and repeatable, but it may not produce fully bespoke editorial copy for every niche Actor. LLM mode can improve copy quality, but it sends the source README and deterministic draft to the selected provider and may require extra review for unsupported claims.

It only works with public Apify Store Actors whose Markdown page is available. Private Actors require authenticated API access, which this version intentionally does not use.

API keys are not written to the dataset or key-value store. They are used only in memory for the selected provider request.

#### Troubleshooting

**The actor cannot resolve an ID**
Use a Store slug such as `username/actor-name` or paste the full Store URL. Public Actor IDs are also supported when the Apify API can resolve them.

**The optimized README feels too generic**
Lower-level sections are built from the source README. If the source lacks examples, use cases, or limitations, the output may need manual domain-specific editing.

**The LLM rewrite fails**
The actor falls back to deterministic output and writes a warning in the dataset item. Check the provider, API key, model name, and account quota.

**I do not want to send README content to an LLM**
Set `llmProvider` to `none`. This is the default.

**The output is too long**
Lower `maxCharacters`. The actor removes FAQ and long tables first, then truncates as a last resort.

#### Support

Found a bug or a weak optimization pattern? Open an issue with the input Actor ID, run ID, and expected README style.

# Actor input Schema

## `actorIds` (type: `array`):

One or more public Apify Actor identifiers. Accepted formats: username/actor-name, username~actor-name, https://apify.com/username/actor-name, or a public Actor ID. The actor fetches the public Store Markdown and optimizes it for review.

## `maxCharacters` (type: `integer`):

Maximum character budget for each optimized README. Use 9900 for Trove Vault launch-ready drafts, or a lower value when you want shorter Store copy.

## `llmProvider` (type: `string`):

Optional second-pass LLM rewrite provider. Choose None to use the deterministic optimizer only. When a provider is selected, the actor sends the source README and deterministic draft to that provider using your API key.

## `llmApiKey` (type: `string`):

API key for the selected LLM provider. Leave blank when LLM Provider is None. The key is used only for the provider request and is never saved to the dataset or key-value store.

## `llmModel` (type: `string`):

Model name for the selected provider. Defaults are used when left blank: gpt-4o-mini for OpenAI, claude-3-5-haiku-latest for Anthropic, and openai/gpt-4o-mini for OpenRouter.

## `llmTemperature` (type: `number`):

Creativity level for the optional LLM rewrite. Lower values keep the output closer to the source README.

## `llmInstructions` (type: `string`):

Optional extra style or business instructions for the LLM rewrite. Example: Keep the tone direct, avoid hype, preserve all public output fields, and target e-commerce operators.

## `includeOriginalReadme` (type: `boolean`):

When enabled, the original README body is included in the dataset item. It is always saved to the key-value store for review.

## `saveMarkdownFiles` (type: `boolean`):

Save original and optimized Markdown files to the default key-value store. Recommended for review workflows.

## Actor input object example

```json
{
  "actorIds": [
    "trovevault/shopify-products-scraper"
  ],
  "maxCharacters": 9900,
  "llmProvider": "none",
  "llmTemperature": 0.2,
  "includeOriginalReadme": false,
  "saveMarkdownFiles": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "actorIds": [
        "trovevault/shopify-products-scraper"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("trovevault/apify-store-readme-optimizer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "actorIds": ["trovevault/shopify-products-scraper"] }

# Run the Actor and wait for it to finish
run = client.actor("trovevault/apify-store-readme-optimizer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "actorIds": [
    "trovevault/shopify-products-scraper"
  ]
}' |
apify call trovevault/apify-store-readme-optimizer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=trovevault/apify-store-readme-optimizer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Apify Store README Optimizer",
        "description": "Fetches public Apify Store Actor READMEs and generates cleaner, review-ready optimization drafts with stronger structure, use cases, examples, troubleshooting, and API-safe snippets.",
        "version": "0.1",
        "x-build-id": "nw5hcqeoGGIWYcAza"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trovevault~apify-store-readme-optimizer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trovevault-apify-store-readme-optimizer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/trovevault~apify-store-readme-optimizer/runs": {
            "post": {
                "operationId": "runs-sync-trovevault-apify-store-readme-optimizer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/trovevault~apify-store-readme-optimizer/run-sync": {
            "post": {
                "operationId": "run-sync-trovevault-apify-store-readme-optimizer",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "actorIds"
                ],
                "properties": {
                    "actorIds": {
                        "title": "Actor IDs or Store URLs",
                        "type": "array",
                        "description": "One or more public Apify Actor identifiers. Accepted formats: username/actor-name, username~actor-name, https://apify.com/username/actor-name, or a public Actor ID. The actor fetches the public Store Markdown and optimizes it for review.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxCharacters": {
                        "title": "Max Characters",
                        "minimum": 3000,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Maximum character budget for each optimized README. Use 9900 for Trove Vault launch-ready drafts, or a lower value when you want shorter Store copy.",
                        "default": 9900
                    },
                    "llmProvider": {
                        "title": "LLM Provider",
                        "enum": [
                            "none",
                            "openai",
                            "anthropic",
                            "openrouter"
                        ],
                        "type": "string",
                        "description": "Optional second-pass LLM rewrite provider. Choose None to use the deterministic optimizer only. When a provider is selected, the actor sends the source README and deterministic draft to that provider using your API key.",
                        "default": "none"
                    },
                    "llmApiKey": {
                        "title": "LLM API Key",
                        "type": "string",
                        "description": "API key for the selected LLM provider. Leave blank when LLM Provider is None. The key is used only for the provider request and is never saved to the dataset or key-value store."
                    },
                    "llmModel": {
                        "title": "LLM Model",
                        "type": "string",
                        "description": "Model name for the selected provider. Defaults are used when left blank: gpt-4o-mini for OpenAI, claude-3-5-haiku-latest for Anthropic, and openai/gpt-4o-mini for OpenRouter."
                    },
                    "llmTemperature": {
                        "title": "LLM Temperature",
                        "minimum": 0,
                        "maximum": 1,
                        "type": "number",
                        "description": "Creativity level for the optional LLM rewrite. Lower values keep the output closer to the source README.",
                        "default": 0.2
                    },
                    "llmInstructions": {
                        "title": "Extra LLM Instructions",
                        "type": "string",
                        "description": "Optional extra style or business instructions for the LLM rewrite. Example: Keep the tone direct, avoid hype, preserve all public output fields, and target e-commerce operators."
                    },
                    "includeOriginalReadme": {
                        "title": "Include Original README",
                        "type": "boolean",
                        "description": "When enabled, the original README body is included in the dataset item. It is always saved to the key-value store for review.",
                        "default": false
                    },
                    "saveMarkdownFiles": {
                        "title": "Save Markdown Files",
                        "type": "boolean",
                        "description": "Save original and optimized Markdown files to the default key-value store. Recommended for review workflows.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
