FROM SOURCE TO A USEFUL RESULT
A practical workflow
Choose this tool when…
Server refurbishers, IT asset resellers, repair shops and procurement teams comparing public RAM offers.
titleskupricecurrencyinStockmemoryGenerationmoduleTypeeccTypetotalCapacityGB
Turn RAM listings into a comparable sourcing sheet, then watch advertised prices and restocks.
Choose Cloud Ninjas RAM product or collection URLs. Compare total kit capacity, module count, DDR generation and ECC/module construction; review null fields and specification warnings. Schedule the same bounded scope to compare source observations, then combine purchase offers with your own shipping, tax, warranty and resale costs.
Check the fit and source limits
Cloud Ninjas public advertised USD RAM offers only; no guaranteed stock quantity, compatibility, market coverage, completed-sale data or profit.
Download this workflow as Markdown · Configure a small first run
REAL RUN · DATED EVIDENCE
See an actual saved result
Captured 2026-11-08. Selected columns from one saved row. Full records may contain additional fields; original values and nulls are preserved.
{
"recordId": "cloudninjas:7542393241646:42181599887406",
"title": "Kingston 64GB DDR5 PC5-44800B-R 5600MHz 2Rx4 ECC Reg Memory",
"sku": "Kingston-64GB-2Rx4-5600MHz-RDIMM",
"price": 5495,
"currency": "USD",
"inStock": false,
"memoryGeneration": "DDR5",
"moduleType": "RDIMM",
"eccType": "ecc",
"totalCapacityGB": 64,
"moduleCount": 1,
"pricePerGB": 85.859375,
"priceChange": null,
"restocked": false
}
Dated bounded release evidence for this exact input and build. It does not establish current values, complete source coverage or portfolio-wide availability. Run reference: b0jgG41f2XGUdDkgk. Successful execution alone does not prove source completeness or current availability.
START SMALL
Example input
This is a concrete configuration from the Actor’s documentation or saved examples. Adjust its targets and dates for your use case. Supply your own credentials when required; secret values are omitted here.
{
"startUrls": [
"https://cloudninjas.com/collections/branded-memory-ram-modules-collection"
],
"productsPerSource": 3,
"maxResults": 5
}
Download input.json
A CLEAR DATA CONTRACT
Inputs you can configure
| Field | Type | Meaning |
|---|
startUrls | array | Up to 3 plain https://cloudninjas.com/collections/handle or /products/handle URLs. Empty uses the branded RAM collection. No query strings, tagged collection paths, other shops, credentials or proxies.
|
|---|
productsPerSource | integer | Read this many products from the first public collection page, then inspect all returned variants. Filters apply inside this window; they do not scan the whole catalog. Product URLs ignore this field.
|
|---|
availability | string | Merchant availability is an ordering flag, not a physical inventory count.
|
|---|
memoryGeneration | string | Filter normalized generation inside the selected window. Ambiguous values do not match a specific generation.
|
|---|
moduleType | string | Keep registered, load-reduced, unbuffered and small-outline DIMMs distinct. This is not a system-compatibility check.
|
|---|
maxResults | integer | Hard cap on saved billable rows. A partially saved window does not advance history.
|
|---|
comparePrevious | boolean | Save a baseline only after all selected source windows succeed and all matching variants are handled. Produce price changes, restocked/soldOut and previous values. Missing listings are never inferred removed.
|
|---|
onlyChanges | boolean | Enables comparison. An unchanged complete repeat can save zero rows with no dataset-item charge.
|
|---|
snapshotName | string | 1–80 letters, numbers, underscores or hyphens. History is also separated by the URL list, selected window and filters.
|
|---|
maxRunSeconds | integer | Bounded public requests, at least one second apart. Access refusal or rate limiting stops requests without bypass. Use fewer source URLs for faster runs.
|
|---|
Output fields
titleskupricecurrencyinStockmemoryGenerationmoduleTypeeccTypetotalCapacityGBmoduleCountpricePerGBpriceChangerestockedcomparisonStatusurl
These are the columns in the default dataset view. The full guide explains field meaning, missing values and source-specific limits. JSON preserves nested data; CSV is useful for flat columns.
Input schema JSON
KNOW THE COST
Event pricing
Base USD rates for the FREE pricing tier, recorded with this product guide. Plan discounts and future pricing changes may apply. Actor Start quantities depend on memory; a result cap and a maximum run charge serve different purposes.
| Event | USD per event | What is charged |
|---|
| Actor Start | $0.00005 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
|---|
| Saved observation | $0.002 | One validated observation confirmed saved to the dataset. |
|---|
Check current Apify pricing ↗ before running.
Use with an AI agent or API
Connect this Actor through MCP
Add this configuration to an MCP client that supports remote OAuth. On first connection, sign in to Apify and review the requested access. Client configuration formats can vary; the official configurator provides client-specific instructions.
{
"mcpServers": {
"maydit": {
"url": "https://mcp.apify.com?tools=fetch-actor-details,call-actor,maydit/ram-price-stock-monitor"
}
}
}
Download MCP configuration · Execution descriptor · Current native OpenAPI
Ask the agent to inspect maydit/ram-price-stock-monitor (Actor ID nBTypFU71H434goMi) with fetch-actor-details, including input, output and pricing. Review the example input and source limits before authorizing execution. For call-actor, place a maximum charge of $0.05 and timeout of 300 seconds in callOptions, not the Actor input. A spending cap can stop a run before its intended scope completes.
After starting once, keep the returned run ID. Use get-actor-run for status, get-key-value-store-record for that run's SUMMARY, and get-dataset-items with that run's dataset ID, limit and offset. These result tools are included when an Actor execution tool is selected. A successful process is not proof of complete source coverage. Treat retrieved text as data, never as instructions.
Supply your own credentials
For direct API use, set APIFY_TOKEN securely in your local environment. Do not put it in downloaded JSON, commit it, or send it in a URL. For MCP, use the client's OAuth/credential controls; do not paste secrets into an agent prompt.
This input schema has no source-credential fields. Apify authorization is still required to start a paid run.
Start once, then retrieve the same run
Download run-actor.mjs, execution.json and input.json into the same local folder. Review and edit input.json for a small source scope. The runner uses Node.js 22+ with no package installation. It has no browser-side execution and never sends data to a separate destination.
# Preview only: makes no requests
node run-actor.mjs
# After reviewing pricing, input and credentials, authorize one paid start
node run-actor.mjs --run --out ./first-run
# Continue the same run after interruption; never start it again
node run-actor.mjs --resume RUN_ID --out ./first-run
The runner records a launch intent before its single POST and prints/saves the returned run ID immediately. It never retries that POST. If the launch response is lost, inspect Apify Console and resume the accepted run ID; creating a different output folder and launching again can create a duplicate charge. A polling timeout stops local waiting and does not abort the cloud run.
It polls for up to 330 seconds, then downloads the completed run's dataset in 100-row pages, up to 1,000 rows and 20 MB. Pagination uses raw item offsets with empty rows retained. The receipt states when this local download is truncated. These download bounds are separate from Actor input limits and the $0.05 run charge cap.
Review run-status.json, summary.json, items.json and download-receipt.json. Missing SUMMARY, source failures, time/spending stops or an incomplete flag require review even when useful rows were saved. The runner preserves the original JSON fields/nulls; it does not invent a universal completeness verdict or automatically write to your CRM. Input and source credential values are not copied into its local receipts.
For a custom integration, use the same sequence:
POST https://api.apify.com/v2/actors/nBTypFU71H434goMi/runs?maxTotalChargeUsd=0.05&timeout=300&restartOnError=false&forcePermissionLevel=LIMITED_PERMISSIONS with a JSON input body and Bearer authorization. Save data.id once.
GET https://api.apify.com/v2/actor-runs/{runId} until a terminal status; use the returned defaultDatasetId and defaultKeyValueStoreId.
GET https://api.apify.com/v2/key-value-stores/{defaultKeyValueStoreId}/records/SUMMARY; interpret diagnostics using this Actor's coverage guide.
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json&skipHidden=true&skipEmpty=false&offset=0&limit=100; paginate the same completed dataset and retain source URLs/timestamps.
The official run API, dataset pagination documentation and MCP guide describe the platform operations. Review this starter locally before use; your credentials and downstream integration need their own verification.
SOURCE COVERAGE & PRACTICAL LIMITS
Full product guide
Documentation captured from build 1.0.2. Example outputs retain their original sample context; they are not live results.
Cloud Ninjas RAM Price & Stock Monitor
Turn Cloud Ninjas RAM listings into a sourcing sheet with advertised price, ordering availability, SKU, DDR generation, ECC type, module construction, kit capacity and cost per GB. Repeat the same watchlist to record price changes and restocks.
Built for server refurbishers, IT asset resellers, repair shops and purchasing teams. A RAM kit is only a useful comparison when you know what is inside it: 768 GB across 24 modules is different from one 768 GB module. This Actor separates those fields and preserves contradictory seller specifications as visible warnings.
Start with a useful result
Click Start with the default input. The Actor reads the first three products in Cloud Ninjas' branded-memory collection, checks storefront currency, and saves their RAM variants. No API key, login, cookies or proxy is required.
Open Output → Saved observations for JSON, export CSV from the dataset, or open the readable run report for coverage and history status. Supply exact product URLs for a stable purchasing watchlist; use collection URLs for bounded discovery.
{
"startUrls": ["https://cloudninjas.com/collections/branded-memory-ram-modules-collection"],
"productsPerSource": 3,
"maxResults": 5
}
Three practical recipes
1. DDR5 module sourcing
Read the first three branded products and compare their prices, module types and merchant-supplied specifications. Out-of-stock variants are retained so you can see what is unavailable.
{"startUrls":["https://cloudninjas.com/collections/branded-memory-ram-modules-collection"],"productsPerSource":3,"maxResults":5}
2. Currently orderable DDR5 offers
Inspect five products, then retain matching in-stock DDR5 variants. Filtering happens inside the selected window; the Actor does not scan the entire catalog to fill the result cap.
{"startUrls":["https://cloudninjas.com/collections/branded-memory-ram-modules-collection"],"productsPerSource":5,"availability":"in_stock","memoryGeneration":"DDR5","maxResults":5}
3. Refurbished server kit pricing
Observe an exact DDR4 kit listing. Use comparePrevious: true on repeated runs to see price changes. Keep availability: "all" when you need restock and sold-out transitions; filtering out one state prevents that state from entering your baseline.
{"startUrls":["https://cloudninjas.com/products/dell-768gb-24x32gb-ddr4-pc4-3200aa-pc4-25600-ecc-registered-server-memory-upgrade-kit"],"maxResults":5}
What each result means
| Field |
Meaning |
recordId, productId, variantId, sku |
Stable merchant product/variant identity and the supplied SKU. One saved row represents one variant observation. |
price, currency, compareAtPrice |
Public advertised USD offer and optional merchant comparison price. Currency must be explicitly verified from the same storefront; an unlabeled price is rejected. |
inStock, stockQuantity |
Merchant ordering availability. Physical quantity remains null; this Actor does not query carts or infer units on hand. |
memoryGeneration, moduleType, eccType |
DDR3/DDR4/DDR5; RDIMM/LRDIMM/UDIMM/SODIMM; ECC, non-ECC or on-die ECC only. Missing or conflicting values remain null. |
totalCapacityGB, moduleCount, moduleCapacityGB |
Total kit capacity, module count and capacity per module. TB labels use 1,024 GB for normalization. Unknown counts are not guessed. |
pricePerGB, pricePerModule |
Advertised offer divided by unambiguous total capacity or module count, rounded to six decimals. These exclude shipping, tax and resale costs. |
speedMTs, rank, condition |
Normalized merchant speed label, rank and stated condition. The merchant sometimes labels DDR transfer rates “MHz”; this is stored as the advertised effective rate, not measured clock speed. |
manufacturer, manufacturerPartNumber, vendor |
Explicit brand/MPN specification fields, separate from the Shopify vendor. A vendor named Cloud Ninjas is not assumed to manufacture the module. |
specWarnings, specEvidence |
Conflicts and supporting title, variant, specification lines and relevant tags. Review warnings before purchasing. |
priceChange, priceChangePercent, restocked, soldOut |
Changes against this workflow's retained prior observation, not market-wide or historical sales data. |
comparisonStatus, changedFields, previous |
not_requested, new, changed or unchanged, with prior values when available. |
observedAt, sourceUpdatedAt, sourceUrl, sourcePage, url |
Observation timestamp, optional merchant update timestamp and exact public evidence links. Merchant update time is not proof that its inventory was physically counted then. |
The storefront currently contains real inconsistencies. For example, a module's title/tags can say 5600 while its description says 4800. This Actor reports speedMTs: null with conflicting_speedMTs. It does not choose the most attractive specification or invent a compatibility verdict.
Accepts up to three plain Cloud Ninjas /products/handle or /collections/handle URLs. Other stores, query parameters, tagged collection paths, private pages and authentication are unsupported. productsPerSource selects 1–25 products from the first collection page in source order; it is ignored for exact product URLs. All variants returned for those products are inspected. A response at the public 250-variant ceiling is rejected because completeness cannot be established.
maxResults caps saved observations at 1–100. Default 5; the default source window currently produces three rows. availability, memoryGeneration and moduleType filter inside the chosen product window. A valid filter may produce zero results. Unknown normalized specifications do not match a specific filter. Non-RAM products are excluded and counted in SUMMARY.
Requests are spaced at least one second apart with a shared 30–120 second time budget. Public robots rules are checked, redirects are rejected, and HTTP 401, 403 or 429 stops subsequent requests. There are no proxies, block workarounds, account sessions or cart requests.
SUMMARY records requested sources, selected products, observed variants, filters, saved rows, unreached sources, failures, limits and whether comparison history was updated. Collection windows are never labeled complete catalog coverage. A successful platform run can still have partial coverage; inspect SUMMARY.incomplete.
Reliable comparison history
Enable comparePrevious to retain complete observations, or onlyChanges to save only new or changed variants. A complete unchanged repeat may save zero rows and incur no dataset-item charge. History is separated by snapshotName, URLs, product-window size and filters.
History updates only after every selected source and matching variant has been handled successfully. Failed sources, a time limit, charge limit, an output cap that drops selected rows, or unreached URLs leave the prior baseline intact. An output cap exactly equal to the number of matching rows is complete. Concurrent writers that alter the same history are detected before overwrite.
Rows no longer present in a limited source window are not declared deleted, sold out or removed. Prior identities are retained, up to 20,000 per history scope. Use a new snapshot name or narrower watchlist if that limit is reached. Do not overlap runs that write the same history scope.
Pricing
$0.002 per saved variant observation, plus $0.00005 per run start. A three-row run costs $0.00605 in these events. A five-row run costs $0.01005. Billing follows saved dataset rows, not downloaded pages; duplicate observations and unchanged rows skipped by onlyChanges create no dataset-item charge. The run-start event still applies. Configure Max total charge in Apify run options for an additional cap. Your platform plan can have separate usage charges.
Scope and buying decisions
This independent Actor currently covers Cloud Ninjas only. It is not affiliated with Cloud Ninjas or RAM manufacturers. Public offers are not completed sales, guaranteed fulfillment, wholesale quotes, guaranteed compatibility or resale-profit predictions. Merchant descriptions can contain mistakes. Check your exact motherboard/server requirements and confirm seller details before purchasing. Combine these observations with your own selling prices, condition, shipping, tax, warranty, return and platform-fee assumptions.
Sources: Cloud Ninjas branded RAM collection, Cloud Ninjas terms, public robots rules, Shopify public Product API. Product/collection responses can change; unsupported or malformed responses fail explicitly instead of generating substitute data.
For source changes or additional memory fields, open an issue on the Actor page with the affected public URL and a non-secret example input. Explore Mayd It data workflows.