The easiest way to accomplish this is to create a way for the creating contract to report what it's doing. I'll refer to the contracts as "factory" and "generated", where there is one "factory" with a function that can create unlimited "generated" contracts. Factory needs a getter function or event emitter; some way of exposing the addresses of the contracts it created. With event emitter: pragma solidity ^0.4.2; contract factory { event LogContractCreated(address generated); function createContract() public returns(bool success) { Generated g = new Generated(); LogContractCreated(g); // Generated g is directly convertable to address return true; } } contract Generated { // whatever it does } With getter function: pragma solidity ^0.4.2; contract factory { // keep track of generated addresses address[] private generated; function createContract() public returns(bool success) { Generated g = new Generated(); // make a new Generated and not its address generated.push(g); // record the address for later return true; } // optionally, report how many rows are in the list function getGeneratedCount() public constant returns(uint count) { return generated.length; } // achieve similar result setting generated to "public" near line 6 function getAddressAtIndex(uint row) public constant returns(address contractAddress) { return generated[row]; } } contract Generated { // whatever it does }